home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / docs / inter45b / interrup.g < prev    next >
Encoding:
Text File  |  1995-03-26  |  324.6 KB  |  8,880 lines

  1. Interrupt List, part 7 of 12
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------l-2E---------------------------------
  4. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  5.     DS:SI -> commandline to execute (see #1371)
  6. Return: all registers except CS:IP destroyed
  7.     AX = status (4DOS v4.0)
  8.        0000h successful
  9.        FFFFh error before processing command (not enough memory, etc)
  10.        other error number returned by command
  11. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  12.       internal commands) without loading another copy of COMMAND.COM
  13.     if COMMAND.COM is the user's command interpreter, the primary copy
  14.       executes the command; this allows the master environment to be
  15.       modified by issuing a "SET" command, but changes in the master
  16.       environment will not become effective until all programs descended
  17.       from the primary COMMAND.COM terminate
  18.     since COMMAND.COM processes the string as if typed from the keyboard,
  19.       the transient portion needs to be present, and the calling program
  20.       must ensure that sufficient memory to load the transient portion can
  21.       be allocated by DOS if necessary
  22.     results are unpredictable if invoked by a program run from a batch file
  23.       because this call is not reentrant and COMMAND.COM uses the same
  24.       internal variables when processing a batch file
  25.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  26.       has been loaded
  27.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  28.  
  29. Format of DOS commandline:
  30. Offset    Size    Description    (Table 1371)
  31.  00h    BYTE    length of command string, not counting trailing CR
  32.  01h    var    command string
  33.   N    BYTE    0Dh (CR)
  34. --------O-2E---------------------------------
  35. INT 2E UP - Windows NT - NATIVE API
  36.     EAX = function number
  37.     EDX = address of parameter block
  38. Return: ???
  39. --------l-2E----BXE22E-----------------------
  40. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  41.     BX = E22Eh
  42.     DS:SI -> zero byte
  43. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  44. ----------2F---------------------------------
  45. INT 2F - Multiplex - NOTES
  46.     AH = identifier of program which is to handle the interrupt
  47.        00h-7Fh reserved for DOS
  48.        B8h-BFh reserved for networks
  49.        C0h-FFh reserved for applications
  50.     AL is the function code
  51.    This is a general mechanism for verifying the presence of a TSR and
  52.    communicating with it.  When searching for a free identifier code for AH
  53.    using the installation check (AL=00h), the calling program should set
  54.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  55.    and SS:SP to be valid on return, since numerous programs now use additional
  56.    registers on input and/or output for the installation check.
  57. Notes:    Since the multiplex chain is growing so long, and beginning to
  58.       experience multiplex number collisions, I am proposing an alternate
  59.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  60.       multiplex, please let me know.
  61.     DOS and some other programs return values in the flags register, so
  62.       any TSR which chains by calling the previous handler rather than
  63.       jumping to it should ensure that the returned flags are preserved
  64.       and passed back to the original caller
  65. SeeAlso: INT 2D
  66. --------t-2F---------------------------------
  67. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  68.     AH = xx (dynamically assigned based upon a search for a multiplex
  69.          number which doesn't answer installed)
  70.     AL = 00h installation check
  71.     ES:DI = EBEBh:BEBEh
  72. Return: AL = 00h not installed
  73.          01h not installed, not OK to install
  74.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  75.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  76.          short form of the manufacturer's name, PPPPPPPP is a product
  77.          name and NNNN is the product's version number
  78. --------t-2F---------------------------------
  79. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  80.     AH = programmer-selected multiplex number
  81.     AL = function
  82.         00h installation check
  83.         Return: AL = FFh if installed
  84.         01h get TSR interrupt vectors
  85.         Return: DX:AX -> vector table (see #1372)
  86.         02h get TSR code segment
  87.         Return: AX = code segment for all interrupt handlers
  88.         03h call user exit routine and release TSR's memory
  89.         04h get signature string
  90.         Return: DX:AX -> counted string containing signature
  91.         05h get TSR's INT 2F handler
  92.         Return: DX:AX -> INT 2F handler
  93.         06h enable/disable TSR
  94.         BL = new state (00h disabled, 01h enabled)
  95.         07h activate TSR (popup if not disabled)
  96.         08h get hotkeys
  97.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  98.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  99.         09h set hotkey
  100.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  101.         CX = new hotkey (CH = keyflags, CL = scancode)
  102.         0Ah-1Fh reserved
  103. Index:    installation check;Ross Wentworth POPUP library
  104. Index:    hotkeys;Ross Wentworth POPUP library
  105.  
  106. Format of POPUP vector table entry:
  107. Offset    Size    Description    (Table 1372)
  108.  00h    BYTE    vector number (00h = end of table)
  109.  01h    DWORD    original vector
  110.  05h    WORD    offset of interrupt handler in TSR's code segment
  111. --------t-2F---------------------------------
  112. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  113.     AH = xx (dynamically assigned based upon a search for a multiplex
  114.          number from C0h to FFh which doesn't answer installed)
  115.     AL = 00h installation check
  116.     ES:DI = 1492h:1992h
  117. Return: AL = 00h not installed
  118.          01h not installed, not OK to install
  119.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  120.            point to author_name_ver table (see #1373)
  121.     AH = FFh
  122. Note:    this interface permits advanced communication with TSRs: it is possible
  123.       to make a generic uninstall utility, advanced TSR relocator programs
  124.       in order to fit fragmented memory areas, etc.
  125. See also: INT 2D"AMIS",INT 2F"Compuscience"
  126. Index:    installation check;CiriSOFT TSR interface
  127. Index:    uninstall;CiriSOFT TSR interface
  128.  
  129. Format of CiriSOFT author_name_ver table:
  130. Offset    Size    Description    (Table 1373)
  131.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  132.           with PSP, XMS upper memory segment if installed as UMB...)
  133.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  134.           in *.COM programs and 0 in upper memory TSR's).
  135.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  136.           used by TSR is possible to determine if hooked vectors are
  137.           still pointing it (and if it is safe to uninstall).
  138.  -10    BYTE    characteristics byte (see #1374)
  139.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  140.           that the TSR must use THIS variable in it's INT 2Fh handler.
  141.  -8    WORD    offset to vector_area table (see #1375)
  142.  -6    WORD    offset to extra_area table (see #1376,bit 7 in offset -10)
  143.  -4   4 BYTEs    signature string "*##*"
  144.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  145.           is used in order to determine if the TSR is already resident
  146.           and it's version code; the ':' char is used as delimiter)
  147.  
  148. Bitfields for CiriSOFT characteristics byte:
  149. Bit(s)    Description    (Table 1374)
  150.  0-2    type
  151.     000 normal program (with PSP)
  152.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  153.           when uninstalling)
  154.     010 device driver (*.SYS)
  155.     011 device driver in EXE format
  156.     1xx others (reserved)
  157.  3-6    reserved
  158.  7    set if extra_table defined and supported (see #1376)
  159. SeeAlso: #1373
  160.  
  161. Format of CiriSOFT vector_area table:
  162. Offset    Size    Description    (Table 1375)
  163.  -1    BYTE    number of vectors intercepted by TSR
  164.  00h    BYTE    first vector number
  165.  01h    DWORD    first vector pointer before installing the TSR
  166.  05h    BYTE    second vector number
  167.  06h    DWORD    second vector pointer before installing the TSR
  168.  0Ah    ...    (and so on)
  169. Note:    the TSR must use these variables to invoke the previous interrupt
  170.       handler routines
  171. SeeAlso: #1373
  172.  
  173. Format of extra_area table (needed only to improve relocation feature):
  174. Offset    Size    Description    (Table 1376)
  175.  00h    WORD    offset to external_ctrl table (see #1377)
  176.         0000h if not supported
  177.  02h    WORD    reserved for future use (0)
  178. SeeAlso: #1373
  179.  
  180. Format of CiriSOFT external_ctrl table:
  181. Offset    Size    Description    (Table 1377)
  182.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  183.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  184.  ---And if bit 0 in offset 00h is off:
  185.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  186.           /SR parameter (silent installation & inhibit)
  187.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  188.           from the previous TSR still resident
  189.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  190. --------c-2F00-------------------------------
  191. INT 2F U - DOS 2.x only PRINT.COM - ???
  192.     AH = 00h
  193.     ???
  194. Return: ???
  195. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  196.     values in AH other than 00h or 01h cause PRINT to return the number of
  197.       files in the queue in AH
  198. SeeAlso: AH=01h
  199. --------P-2F00-------------------------------
  200. INT 2F U - PSPRINT - PRINT JOB CONTROL
  201.     AH = 00h
  202.     ???
  203. Return: ???
  204. --------c-2F0080-----------------------------
  205. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  206.     AX = 0080h
  207. Return: after PRINT executes
  208. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  209.     this function is not supported by the Novell DOS 7 PRINT.COM
  210. --------N-2F00D8-----------------------------
  211. INT 2F - Personal NetWare - VLM - ???
  212.     AX = 00D8h
  213.     ???
  214. Return: ???
  215. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  216.       NOP
  217. --------c-2F01-------------------------------
  218. INT 2F U - DOS 2.x only PRINT.COM - ???
  219.     AH = 01h
  220.     ???
  221. Return: ???
  222. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  223.     values in AH other than 00h or 01h cause PRINT to return the number of
  224.       files in the queue in AH
  225. SeeAlso: AH=00h
  226. --------c-2F0100-----------------------------
  227. INT 2F - DOS 3+ PRINT - INSTALLATION CHECK
  228.     AX = 0100h
  229. Return: AL = status
  230.         00h not installed
  231.         01h not installed, but not OK to install
  232.         FFh installed
  233.         AH = 00h (Novell DOS 7)
  234. SeeAlso: AX=0101h
  235. --------c-2F0100SI20D6-----------------------
  236. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  237.     AX = 0100h
  238.     SI = 20D6h
  239.     DI = 8761h
  240. Return: AX = 00FFh if installed
  241.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  242.         SI = resident code segment
  243. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  244.       LaserTools' PrintCache memory/disk-based print spooler package
  245. Note:    if either of SI or DI differ from the indicated magic values, only AX
  246.       will be modified on return, for compatibility with DOS PRINT
  247. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  248. --------c-2F0101-----------------------------
  249. INT 2F - DOS 3+ PRINT - SUBMIT FILE FOR PRINTING
  250.     AX = 0101h
  251.     DS:DX -> submit packet (see #1378)
  252. Return: CF clear if successful
  253.         AL = status
  254.         01h added to queue
  255.         9Eh now printing
  256.     CF set on error
  257.         AX = error code (see #1379,#0885 at INT 21/AH=59h)
  258. SeeAlso: AX=0102h
  259.  
  260. Format of PRINT submit packet:
  261. Offset    Size    Description    (Table 1378)
  262.  00h    BYTE    level (must be 00h)
  263.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  264.  
  265. (Table 1379)
  266. Values for PRINT error code:
  267.  0001h    invalid function
  268.  0002h    file not found
  269.  0003h    path not found
  270.  0004h    out of file handles
  271.  0005h    access denied
  272.  0008h    print queue full
  273.  0009h    spooler busy
  274.  000Ch    name too long
  275.  000Fh    invalid drive
  276. --------c-2F0101SI20D6-----------------------
  277. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  278.     AX = 0101h
  279.     SI = 20D6h
  280.     DI = 8761h
  281.     DS:DX -> submit packet (see #1378)
  282.     CL = print options
  283.         bit 4: use default options
  284. Return: CF clear if successful
  285.         AL = status
  286.         01h added to queue
  287.         9Eh now printing
  288.     CF set on error
  289.         AX = error code (see #1379)
  290. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  291.       LaserTools' PrintCache memory/disk-based print spooler package
  292. Note:    if either SI or DI differs from the indicated magic values on entry,
  293.       PrintCache will use the default print options for the file for
  294.       compatibility with DOS PRINT
  295. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  296. --------c-2F0102-----------------------------
  297. INT 2F - DOS 3+ PRINT - REMOVE FILE FROM PRINT QUEUE
  298.     AX = 0102h
  299.     DS:DX -> ASCIZ filename (wildcards allowed)
  300. Return: CF clear if successful
  301.     CF set on error
  302.         AX = error code (see #1379)
  303. SeeAlso: AX=0101h,AX=0103h
  304. --------c-2F0103-----------------------------
  305. INT 2F - DOS 3+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  306.     AX = 0103h
  307. Return: CF clear if successful
  308.     CF set on error
  309.         AX = error code (see #1379)
  310. SeeAlso: AX=0102h
  311. --------c-2F0104-----------------------------
  312. INT 2F - DOS 3+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  313.     AX = 0104h
  314. Return: CF clear if successful
  315.         DX = error count since status last read
  316.         DS:SI -> print queue
  317.     CF set on error
  318.         AX = error code (see #1379)
  319. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  320.       to avoid changing the list while it is being examined
  321. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  322.       an empty filename; the first name is the file currently being printed
  323.     printing is stopped until AX=0105h is called to prevent the queue
  324.       from changing while the filenames are being read
  325. SeeAlso: AX=0101h,AX=0105h
  326. --------c-2F0105-----------------------------
  327. INT 2F - DOS 3+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  328.     AX = 0105h
  329. Return: CF clear if successful
  330.     CF set on error
  331.         AX = error code (see #1379)
  332. Desc:    restart PRINT's activities once an application finishes examining the
  333.       print queue
  334. SeeAlso: AX=0104h
  335. --------c-2F0106-----------------------------
  336. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  337.     AX = 0106h
  338. Return: CF set if files in print queue
  339.         AX = error code 0008h (queue full)
  340.         DS:SI -> device driver header
  341.     CF clear if print queue empty
  342.         AX = 0000h
  343. Desc:    determine which device, if any, PRINT is currently using for output
  344. Notes:    undocumented prior to the release of MS-DOS 5.0
  345.     this function can be used to allow a program to avoid printing to the
  346.       printer on which PRINT is currently performing output
  347. SeeAlso: AX=0104h
  348. --------c-2F0107-----------------------------
  349. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  350.     AX = 0107h
  351.     CL bit 0: output form feed between print jobs
  352. Return: AL destroyed
  353. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  354. --------N-2F0200-----------------------------
  355. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  356.     AX = 0200h
  357. Return: AL = FFh if installed
  358. Desc:    determine whether the PC LAN Program redirector is installed
  359. SeeAlso: AX=0201h,AX=0203h
  360. --------N-2F0201-----------------------------
  361. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  362.     AX = 0201h
  363. Return: nothing???
  364. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  365.     AX=0202h appears to be the opposite function
  366.     these functions are supposedly used to signal opening and closing of
  367.       printers
  368. SeeAlso: AX=0202h
  369. --------N-2F0202-----------------------------
  370. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  371.     AX = 0202h
  372.     ???
  373. Return: nothing???
  374. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  375.     these functions are supposedly used to signal opening and closing of
  376.       printers
  377. SeeAlso: AX=0201h
  378. --------N-2F0203-----------------------------
  379. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  380.     AX = 0203h
  381. Return: nothing???
  382. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  383.     AX=0204h appears to be the opposite function
  384.     these functions are supposedly used to signal opening and closing of
  385.       printers
  386. SeeAlso: AX=0200h,AX=0204h
  387. --------N-2F0204-----------------------------
  388. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  389.     AX = 0204h
  390.     ???
  391. Return: nothing???
  392. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  393.     AX=0203h appears to be the opposite function
  394.     these functions are supposedly used to signal opening and closing of
  395.       printers
  396. SeeAlso: AX=0200h,AX=0203h
  397. --------N-2F---------------------------------
  398. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  399.     AX = 02xxh
  400.     ???
  401. Return: ???
  402. --------l-2F0500-----------------------------
  403. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  404.     AX = 0500h
  405. Return: AL = 00h not installed, OK to install
  406.          01h not installed, can't install
  407.          FFh installed
  408. Desc:    determine whether a critical error message override is installed
  409. Note:    this set of functions allows a user program to partially or completely
  410.       override the default critical error handler's message in COMMAND.COM
  411. SeeAlso: AH=05h,INT 24
  412. --------l-2F05-------------------------------
  413. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  414.     AH = 05h
  415. ---DOS 3.x---
  416.     AL = extended error code (not zero)
  417. ---DOS 4+ ---
  418.     AL = error type
  419.         01h DOS extended error code
  420.         02h parameter error
  421.     BX = error code
  422. Return: CF clear if successful
  423.         ES:DI -> ASCIZ error message (read-only)
  424.         AL = completion state
  425.         00h message requires completion with device name, drive, etc.
  426.         01h message is complete as returned
  427.     CF set if error code can't be converted to string
  428.         AX,DI,ES destroyed
  429.     other flags corrupted
  430. Notes:    called at start of COMMAND.COM's default critical error handler if
  431.       installed by a user program, allowing partial or complete overriding
  432.       of the default error messages
  433.     subfunction 02h is called by many DOS 4 external programs
  434.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  435.       returned string
  436. SeeAlso: AX=0500h,AX=122Eh,INT 24
  437. --------U-2F0600-----------------------------
  438. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  439.     AX = 0600h
  440. Return: AL = status
  441.         00h not installed
  442.         01h not installed, but not OK to install
  443.         FFh installed
  444. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  445.       (see INT 21/AH=52h)
  446.     undocumented prior to the release of DOS 5.0
  447. SeeAlso: AX=0601h,INT 21/AH=52h
  448. --------U-2F0601-----------------------------
  449. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  450.     AX = 0601h
  451. Return: ES = segment of ASSIGN work area and assignment table
  452. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  453.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  454. SeeAlso: AX=0600h
  455. --------D-2F0800-----------------------------
  456. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  457.     AX = 0800h
  458. Return: AL = status
  459.         00h not installed, OK to install
  460.         01h not installed, not OK to install
  461.         FFh installed
  462. Desc:    determine whether the internal support code used by DRIVER.SYS is
  463.       present; it is always present in DOS 3.2+
  464. Note:    supported by DR-DOS 5.0
  465. --------D-2F0801-----------------------------
  466. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  467.     AX = 0801h
  468.     DS:DI -> drive data table (see #1386,#1387,#1388)
  469. Return: AX,BX,SI,ES destroyed
  470. Notes:    moves down internal list of drive data tables, copying and modifying
  471.       the drive description flags word for tables referencing same physical
  472.       drive
  473.     the data table is appended to the chain of tables
  474.     supported by DR-DOS 5.0
  475. SeeAlso: AX=0803h
  476. --------D-2F0802-----------------------------
  477. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  478.     AX = 0802h
  479.     ES:BX -> device driver request header (see #1382)
  480. Return: request header updated as per requested operation
  481. Notes:    supported by DR-DOS 5.0
  482.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  483.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  484.     the command codes (see #1380) and structures described below apply
  485.       to all drivers which support the appropriate commands; this call is
  486.       just one of a number of ways in which a device driver request may
  487.       be invoked
  488.     this call reportedly leaves one word on the stack under MS-DOS 6.2,
  489.       so the stack pointer should be saved and restored around the call
  490.       to this function
  491. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  492.  
  493. (Table 1380)
  494. Values for device driver command code:
  495.  00h    INIT
  496.  01h    MEDIA CHECK (block devices)
  497.  02h    BUILD BPB (block devices)
  498.  03h    IOCTL INPUT
  499.  04h    INPUT
  500.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  501.  06h    INPUT STATUS (character devices)
  502.  07h    INPUT FLUSH (character devices)
  503.  08h    OUTPUT
  504.  09h    OUTPUT WITH VERIFY
  505.  0Ah    OUTPUT STATUS (character devices)
  506.  0Bh    OUTPUT FLUSH (character devices)
  507.  0Ch    IOCTL OUTPUT
  508.  0Dh    (DOS 3+) DEVICE OPEN
  509.  0Eh    (DOS 3+) DEVICE CLOSE
  510.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  511.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  512.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  513.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  514.  13h    (DOS 3.2+) GENERIC IOCTL
  515.  14h    unused
  516.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  517.  16h    unused
  518.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  519.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  520.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  521.  80h    (CD-ROM) READ LONG
  522.  81h    (CD-ROM) reserved
  523.  82h    (CD-ROM) READ LONG PREFETCH
  524.  83h    (CD-ROM) SEEK
  525.  84h    (CD-ROM) PLAY AUDIO
  526.  85h    (CD-ROM) STOP AUDIO
  527.  86h    (CD-ROM) WRITE LONG
  528.  87h    (CD-ROM) WRITE LONG VERIFY
  529.  88h    (CD-ROM) RESUME AUDIO
  530.  
  531. Bitfields for device request status:
  532. Bit(s)    Description    (Table 1381)
  533.  15    error
  534.  14-11    reserved
  535.  10    ??? set by DOS kernel on entry to some driver calls
  536.  9    busy
  537.  8    done (may be clear on return under European MS-DOS 4.0)
  538.  7-0    error code if bit 15 set (see #1383)
  539.  
  540. Format of device driver request header:
  541. Offset    Size    Description    (Table 1382)
  542.  00h    BYTE    length of request header
  543.  01h    BYTE    subunit within device driver
  544.  02h    BYTE    command code (see #1380)
  545.  03h    WORD    status (filled in by device driver) (see #1381)
  546. ---DOS---
  547.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  548.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  549.               device's request queue
  550.         (other versions) reserved (unused in DOS 2.x and 3.x)
  551. ---STARLITE architecture---
  552.  05h    DWORD    pointer to next request header
  553.  09h  4 BYTEs    reserved
  554. ---command code 00h---
  555.  0Dh    BYTE    (ret) number of units
  556.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1384)
  557.               (European MS-DOS 4.0 only)
  558.         (call) pointer past end of memory available to driver (DOS 5+)
  559.         (ret) address of first free byte following driver
  560.  12h    DWORD    (call) pointer to commandline arguments
  561.         (ret) pointer to BPB array (block drivers) or
  562.               0000h:0000h (character drivers)
  563.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  564.    ---European MS-DOS 4.0---
  565.  17h    DWORD    pointer to function to save registers on stack
  566.    ---DOS 5+ ---
  567.  17h    WORD    (ret) error-message flag
  568.         0001h MS-DOS should display error msg on init failure
  569. ---command code 01h---
  570.  0Dh    BYTE    media descriptor
  571.  0Eh    BYTE    (ret) media status
  572.         00h don't know
  573.         01h media has not changed
  574.         FFh media has been changed
  575.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  576.           bit in device header is set and disk changed
  577. ---command code 02h---
  578.  0Dh    BYTE    media descriptor
  579.  0Eh    DWORD    transfer address
  580.         -> scratch sector if NON-IBM FORMAT bit in device header set
  581.         -> first FAT sector otherwise
  582.  12h    DWORD    pointer to BPB (set by driver) (see #0875 at INT 21/AH=53h)
  583. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  584.  0Dh    BYTE    media descriptor (block devices only)
  585.  0Eh    DWORD    transfer address
  586.  12h    WORD    (call) number of bytes to read/write
  587.         (ret) actual number of bytes read or written
  588. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR-DOS 6)---
  589.  0Dh    BYTE    media descriptor (block devices only)
  590.  0Eh    DWORD    transfer address
  591.  12h    WORD    byte count (character devices) or sector count (block devices)
  592.  14h    WORD    starting sector number (block devices only)
  593.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  594.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  595.           device attribute word bit 1 set only) if starting sector
  596.           number above is FFFFh (see INT 21/AH=52h)
  597. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR-DOS 6)---
  598.  0Dh    BYTE    media descriptor (block devices only)
  599.  0Eh    DWORD    transfer address
  600.  12h    WORD    byte count (character devices) or sector count (block devices)
  601.  14h    DWORD    32-bit starting sector number (block devices only)
  602.     Note:    to reliably determine which variant of the request block for
  603.           functions 04h,08h,09h has been passed to the driver, check
  604.           the length field as well as the word at offset 14h.  If the
  605.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  606.           starting sector number; if the length is 18h, use the DWORD
  607.           at 14h; otherwise, use the WORD at 14h.
  608. ---command code 05h---
  609.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  610. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  611.  no further fields
  612. ---command code 10h---
  613.  0Dh    BYTE    unused
  614.  0Eh    DWORD    transfer address
  615.  12h    WORD    (call) number of bytes to write
  616.         (ret) actual number of bytes written
  617. ---command codes 11h,12h---
  618.  0Dh    BYTE    reserved
  619. ---command code 15h---
  620.  no further fields
  621. ---command codes 13h,19h---
  622.  0Dh    BYTE    category code
  623.         00h unknown
  624.         01h COMn:
  625.         03h CON
  626.         05h LPTn:
  627.         07h mouse (European MS-DOS 4.0)
  628.         08h disk
  629.         9Eh (STARLITE) Media Access Control driver
  630.  0Eh    BYTE    function code
  631.         00h (STARLITE) MAC Bind request
  632.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  633.         SI contents (European MS-DOS 4.0)
  634.  11h    WORD    offset of device driver header
  635.         DI contents (European MS-DOS 4.0)
  636.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  637. ---command codes 80h,82h---
  638.  0Dh    BYTE    addressing mode
  639.         00h HSG (default)
  640.         01h Phillips/Sony Red Book
  641.  0Eh    DWORD    transfer address (ignored for command 82h)
  642.  12h    WORD    number of sectors to read
  643.         (if 0 for command 82h, request is an advisory seek)
  644.  14h    DWORD    starting sector number
  645.         logical sector number in HSG mode
  646.         frame/second/minute/unused in Red Book mode
  647.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  648.  18h    BYTE    data read mode
  649.         00h cooked (2048 bytes per frame)
  650.         01h raw (2352 bytes per frame, including EDC/ECC)
  651.  19h    BYTE    interleave size (number of sectors stored consecutively)
  652.  1Ah    BYTE    interleave skip factor
  653.         (number of sectors between consecutive portions)
  654. ---command code 83h---
  655.  0Dh    BYTE    addressing mode (see above)
  656.  0Eh    DWORD    transfer address (ignored)
  657.  12h    WORD    number of sectors to read (ignored)
  658.  14h    DWORD    starting sector number (see also above)
  659. ---command code 84h---
  660.  0Dh    BYTE    addressing mode (see above)
  661.  0Eh    DWORD    starting sector number (see also above)
  662.  12h    DWORD    number of sectors to play
  663. ---command codes 85h,88h---
  664.  no further fields
  665. ---command codes 86h,87h---
  666.  0Dh    BYTE    addressing mode (see above)
  667.  0Eh    DWORD    transfer address (ignored in write mode 0)
  668.  12h    WORD    number of sectors to write
  669.  14h    DWORD    starting sector number (see also above)
  670.  18h    BYTE    write mode
  671.         00h mode 0 (write all zeros)
  672.         01h mode 1 (default) (2048 bytes per sector)
  673.         02h mode 2 form 1 (2048 bytes per sector)
  674.         03h mode 2 form 2 (2336 bytes per sector)
  675.  19h    BYTE    interleave size (number of sectors stored consecutively)
  676.  1Ah    BYTE    interleave skip factor
  677.         (number of sectors between consecutive portions)
  678.  
  679. (Table 1383)
  680. Values for device driver error code:
  681.  00h    write-protect violation
  682.  01h    unknown unit
  683.  02h    drive not ready
  684.  03h    unknown command
  685.  04h    CRC error
  686.  05h    bad drive request structure length
  687.  06h    seek error
  688.  07h    unknown media
  689.  08h    sector not found
  690.  09h    printer out of paper
  691.  0Ah    write fault
  692.  0Bh    read fault
  693.  0Ch    general failure
  694.  0Dh    reserved
  695.  0Eh    (CD-ROM) media unavailable
  696.  0Fh    invalid disk change
  697.  
  698. (Table 1384)
  699. Call European MS-DOS 4.0 device helper function with:
  700.     DL = function
  701.         00h "SchedClock" called on each timer tick
  702.         AL = tick interval in milliseconds
  703.         01h "DevDone" device I/O complete
  704.         ES:BX -> request header
  705.         Note:    must update status word first; may be called from
  706.               an interrupt handler
  707.         02h "PullRequest" pull next request from queue
  708.         DS:SI -> DWORD pointer to start of device's request queue
  709.         Return: ZF clear if pending request
  710.                 ES:BX -> request header
  711.             ZF set if no more requests
  712.         03h "PullParticular" remove specific request from queue
  713.         DS:SI -> DWORD pointer to start of device's request queue
  714.         ES:BX -> request header
  715.         Return: ZF set if request header not found
  716.         04h "PushRequest" push the request onto the queue
  717.         DS:SI -> DWORD pointer to start of device's request queue
  718.         ES:BX -> request header
  719.         interrupts disabled
  720.         05h "ConsInputFilter" keyboard input check
  721.         AX = character (high byte 00h if PC ASCII character)
  722.         Return: ZF set if character should be discarded
  723.             ZF clear if character should be handled normally
  724.         Note:    called by keyboard interrupt handler so DOS can scan
  725.               for special input characters
  726.         06h "SortRequest" push request in sorted order by starting sector
  727.         DS:SI -> DWORD pointer to start of device's request queue
  728.         ES:BX -> request header
  729.         interrupts disabled
  730.         07h "SigEvent" send signal on keyboard event
  731.         AH = event identifier
  732.         Return: AL,FLAGS destroyed
  733.         09h "ProcBlock" block on event
  734.         AX:BX = event identifier (typically a pointer)
  735.         CX = timeout in ms or 0000h for never
  736.         DH = interruptable flag (nonzero if pause may be interrupted)
  737.         interrupts disabled
  738.         Return: after corresponding ProcRun call
  739.             CF clear if event wakeup, set if unusual wakeup
  740.             ZF set if timeout wakeup, clear if interrupted
  741.             AL = wakeup code, nonzero if unusual wakeup
  742.             interrupts enabled
  743.             BX,CX,DX destroyed
  744.         Note:    block process and schedules another to run
  745.         0Ah "ProcRun" unblock process
  746.         AX:BX = event identifier (typically a pointer)
  747.         Return: AX = number of processes awakened
  748.             ZF set if no processes awakened
  749.             BX,CX,DX destroyed
  750.         0Bh "QueueInit" initialize/clear character queue
  751.         DS:BX -> character queue structure (see #1385)
  752.         Note:    the queue size field must be set before calling
  753.         0Dh "QueueWrite" put a character in the queue
  754.         DS:BX -> character queue (see #1385)
  755.         AL = character to append to end of queue
  756.         Return: ZF set if queue is full
  757.             ZF clear if character stored
  758.         0Eh "QueueRead" get a character from the queue
  759.         DS:BX -> character queue (see #1385)
  760.         Return: ZF set if queue is empty
  761.             ZF clear if characters in queue
  762.                 AL = first character in queue
  763.         10h "GetDOSVar" return pointer to DOS variable
  764.         AL = index of variable
  765.             03h current process ID
  766.         BX = index into variable if AL specifies an array
  767.         CX = expected length of variable
  768.         Return: CF clear if successful
  769.                 DX:AX -> variable
  770.             CF set on error
  771.                 AX,DX destroyed
  772.             BX,CX destroyed
  773.         Note:    the variables may not be modified
  774.         14h "Yield" yield CPU if higher-priority task ready to run
  775.         Return: FLAGS destroyed
  776.         1Bh "CritEnter" begin system critical section
  777.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  778.         Return: AX,BX,CX,DX destroyed
  779.         1Ch "CritLeave" end system critical section
  780.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  781.         Return: AX,BX,CX,DX destroyed
  782.         Note:    must be called in the context of the process which
  783.               called CritEnter on the semaphore
  784. Note:    the DWORD pointing at the request queue must be allocated by the driver
  785.       and initialized to 0000h:0000h.  It always points at the next request
  786.       to be executed
  787.  
  788. Format of European MS-DOS 4.0 character queue:
  789. Offset    Size    Description    (Table 1385)
  790.  00h    WORD    size of queue in bytes
  791.  02h    WORD    index of next character out
  792.  04h    WORD    count of characters in the queue
  793.  06h  N BYTEs    queue buffer
  794. --------D-2F0803-----------------------------
  795. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  796.     AX = 0803h
  797. Return: DS:DI -> first drive data table in list (see #1386,#1387,#1388)
  798. Note:    not available under DR-DOS 5.0
  799. SeeAlso: AX=0801h
  800.  
  801. Format of DOS 3.30 drive data table:
  802. Offset    Size    Description    (Table 1386)
  803.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  804.  04h    BYTE    physical unit number (for INT 13)
  805.  05h    BYTE    logical drive number (0=A:)
  806.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  807.         Offset    Size    Description
  808.          00h    WORD    bytes per sector
  809.          02h    BYTE    sectors per cluster, FFh if unknown
  810.          03h    WORD    number of reserved sectors
  811.          05h    BYTE    number of FATs
  812.          06h    WORD    number of root dir entries
  813.          08h    WORD    total sectors
  814.          0Ah    BYTE    media descriptor, 00h if unknown
  815.          0Bh    WORD    sectors per FAT
  816.          0Dh    WORD    sectors per track
  817.          0Fh    WORD    number of heads
  818.          11h    WORD    number of hidden sectors
  819.  19h    BYTE    flags
  820.         bit 6: 16-bit FAT instead of 12-bit FAT
  821.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  822.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  823.           fixed media)
  824.  27h    BYTE    terminating null for volume label???
  825.  28h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  826.  29h    WORD    bit flags describing drive (see #1389)
  827.  2Bh    WORD    number of cylinders
  828.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  829.  40h  3 BYTEs    ???
  830.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  831.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  832.           media and PC-DOS 3.30)
  833.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  834. ---removable media---
  835.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  836. ---fixed media---
  837.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  838.  4Fh    WORD    absolute cylinder number of partition's start on physical
  839.           drive (always FFFFh if primary partition)
  840. SeeAlso: #1387,#1388
  841.  
  842. Format of COMPAQ DOS 3.31 drive data table:
  843. Offset    Size    Description    (Table 1387)
  844.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  845.  04h    BYTE    physical unit number (for INT 13)
  846.  05h    BYTE    logical drive number (0=A:)
  847.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  848.  1Fh  6 BYTEs    reserved fields from BPB above???
  849.  25h    BYTE    flags
  850.         bit 6: 16-bit FAT instead of 12-bit FAT
  851.         bit 5: large volume???
  852.  26h    WORD    device-open count???
  853.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  854.           fixed media)
  855.  33h    BYTE    terminating null for volume label
  856.  34h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  857.  35h    WORD    bit flags describing drive (see #1389)
  858.  37h    WORD    number of cylinders
  859.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  860.  52h  6 BYTEs    ??? apparently always zeros
  861.  58h    BYTE    least-significant byte of last-accessed cylinder number
  862. ---removable media---
  863.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  864. ---fixed media---
  865.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  866.  5Bh    WORD    absolute cylinder number of partition's start on physical
  867.           drive (always FFFFh if primary partition)
  868. SeeAlso: #1386,#1388
  869.  
  870. Format of DOS 4.0-6.0 drive data table:
  871. Offset    Size    Description    (Table 1388)
  872.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  873.  04h    BYTE    physical unit number (for INT 13)
  874.  05h    BYTE    logical drive number (0=A:)
  875.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  876.         Offset    Size    Description
  877.          00h    WORD    bytes per sector
  878.          02h    BYTE    sectors per cluster, FFh if unknown
  879.          03h    WORD    number of reserved sectors
  880.          05h    BYTE    number of FATs
  881.          06h    WORD    number of root dir entries
  882.          08h    WORD    total sectors (see offset 15h if zero)
  883.          0Ah    BYTE    media descriptor, 00h if unknown
  884.          0Bh    WORD    sectors per FAT
  885.          0Dh    WORD    sectors per track
  886.          0Fh    WORD    number of heads
  887.          11h    DWORD    number of hidden sectors
  888.          15h    DWORD    total sectors if WORD at 08h is zero
  889.  1Fh    BYTE    flags
  890.         bit 6: 16-bit FAT instead of 12-bit
  891.         bit 7: unsupportable disk (all accesses will return Not Ready)
  892.  20h    WORD    device-open count
  893.  22h    BYTE    device type (see #0781 at INT 21/AX=440Dh)
  894.  23h    WORD    bit flags describing drive (see #1389)
  895.  25h    WORD    number of cylinders (for partition only, if hard disk)
  896.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  897.  40h  6 BYTEs    reserved (part of BPB above)
  898.  46h    BYTE    last track accessed
  899. ---removable media---
  900.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  901. ---fixed media---
  902.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  903.         always 0001h for DOS 5+
  904.  49h    WORD    absolute cylinder number of partition's start on physical drive
  905.         (FFFFh if primary partition in DOS 4.x)
  906. ------
  907.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  908.           extended boot record rather than root directory)
  909.  56h    BYTE    terminating null for volume label
  910.  57h    DWORD    serial number
  911.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  912.  63h    BYTE    terminating null for filesystem type
  913. SeeAlso: #1386,#1387
  914.  
  915. Bitfields for flags describing drive:
  916. Bit(s)    Description    (Table 1389)
  917.  0    fixed media
  918.  1    door lock ("changeline") supported
  919.  2    current BPB locked
  920.  3    all sectors in a track are the same size
  921.  4    physical drive has multiple logical units
  922.  5    current logical drive for shared physical drive
  923.  6    disk change detected
  924.  7    device parameters were changed (set DASD before formatting)
  925.     (see #0780 at INT 21/AX=440Dh)
  926.  8    disk reformatted (BPB of current media was changed)
  927.  9    access flag (fixed media only, disables reads and writes)
  928.     (see #0786 at INT 21/AX=440Dh)
  929. --------f-2F1000-----------------------------
  930. INT 2F - SHARE - INSTALLATION CHECK
  931.     AX = 1000h
  932. Return: AL = status
  933.         00h not installed, OK to install
  934.         01h not installed, not OK to install
  935.         FFh installed
  936. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  937.       (08E9: OR  AL,AL
  938.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  939.     values of AL other than described here put PC-DOS 4.00 into the same
  940.       loop (the buggy instructions are the same)
  941. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  942.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  943.       inactive state (due to the undocumented /NC flag used by the autoload
  944.       code) until this call is made
  945.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  946.     Windows Enhanced mode hooks this call and reports that SHARE is
  947.       installed even when it is not
  948. SeeAlso: AX=1080h,INT 21/AH=52h
  949. --------d-2F1001-----------------------------
  950. INT 2F U - DR-DOS 6.0 SHARE internal - SET ???
  951.     AX = 1001h
  952.     DX:BX -> ???function
  953. Notes:    this function is also supported by SuperStor, a disk-compression
  954.       program by Addstor which is bundled with DR-DOS 6.0, and the
  955.       Novell DOS 7 DELWATCH.EXE
  956.     the default handler for the pointer set by this call under DELWATCH
  957.       simply returns with CF set
  958. SeeAlso: AX=1000h,AX=F800h
  959. --------f-2F1040-----------------------------
  960. INT 2F U - DOS 4 only SHARE internal - ???
  961.     AX = 1040h
  962.     ???
  963. Return: AL = FFh???
  964. SeeAlso: AX=1000h
  965. --------f-2F1080-----------------------------
  966. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  967.     AX = 1080h
  968. Return: AL = status
  969.         F0h successful
  970.         FFh checking was already on
  971. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  972.       and file sharing checks.  The undocumented commandline flag /NC can
  973.       be used to disable the sharing code.
  974. SeeAlso: AX=1000h,AX=1081h
  975. --------f-2F1081-----------------------------
  976. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  977.     AX = 1081h
  978. Return: AL = status
  979.         F0h successful
  980.         FFh checking was already off
  981. Note:    (see AX=1080h)
  982. SeeAlso: AX=1000h,AX=1080h
  983. ----------2F10FE-----------------------------
  984. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  985.     AX = 10FEh
  986. Return: AX = 20FFh if installed and active
  987.         DX:BX -> private entry point (see #1390)
  988.  
  989. (Table 1390)
  990. Call DELWATCH private entry point with:
  991.     AH = function
  992.         00h NOP???
  993.         Return: AX = 0000h
  994.             CX = 0004h (unsupported function)
  995.         01h disable DELWATCH on drive
  996.         AL = drive number (00h = A:)
  997.         Return: AX = status (0000h if failed, FFFFh if successful)
  998.         02h ???
  999.         AL = drive number (00h = A:)
  1000.         ???
  1001.         Return: ???
  1002.         03h    ???
  1003.         AL = drive number (00h = A:)
  1004.         CX = ??? (0000h/0001h)
  1005.         ???
  1006.         Return: ???
  1007.         04h ???
  1008.         AL = drive number (00h = A:)
  1009.         ???
  1010.         Return: ???
  1011.         05h ???
  1012.         AL = drive number (00h = A:)
  1013.         ???
  1014.         Return: ???
  1015.         06h enable DELWATCH on drive
  1016.         AL = drive number with bit 7 set (80h = A:, etc.)
  1017.         BX = maximum files of same name in one directory to save
  1018.         CX = maximum files to save on this disk
  1019.         ???
  1020.         Return: AX = status
  1021.                 0000h failed
  1022.                 FFFFh successful
  1023.             CX = error code on failure
  1024.                 (0004h if AL < 80h on entry)
  1025.         07h ???
  1026.         08h set file extensions list
  1027.         AL = sense (00h exclude named extensions, 01h only named ext.)
  1028.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  1029.               per extension)
  1030.         Return: AX = FFFFh (successful)
  1031.         09h    ???
  1032.         AL = drive number (00h = A:)
  1033.         ???
  1034.         Return: ???
  1035.         0Ah ???
  1036.         AL = drive number (00h = A:)
  1037.         ???
  1038.         Return: ???
  1039.         0Bh reset ???
  1040.         Return: AX = FFFFh (successful)
  1041.         see also function 0Dh
  1042.         0Ch check if drive enabled
  1043.         AL = drive number with bit 7 set (80h = A:, etc.)
  1044.         Return: AX = state
  1045.                 0000h disabled or error (check CX)
  1046.                 0001h drive enabled
  1047.             CX = error code (0004h invalid drive number)
  1048.         0Dh set ???
  1049.         BX = ???
  1050.         Return: AX = FFFFh (successful)
  1051.         see also function 0Bh
  1052.         0Eh ???
  1053.         AL = drive number (00h = A:)
  1054.         ???
  1055.         Return: ???
  1056. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  1057.     registers unchanged if AH >= 0Fh on entry
  1058. --------O-2F10FF-----------------------------
  1059. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  1060.     AX = 10FFh
  1061.     ES:BX -> ???
  1062. Note:    sets pointer in kernel
  1063. --------N-2F1100-----------------------------
  1064. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  1065.     AX = 1100h
  1066. Return: AL = status
  1067.         00h not installed, OK to install
  1068.         01h not installed, not OK to install
  1069.         FFh installed
  1070.         AH = product identifier (ad hoc by various manufacturers)
  1071.             00h if PC Tools v8 DRIVEMAP
  1072.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  1073.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  1074. Notes:    this function is called by the DOS 3.1+ kernel
  1075.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  1076.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  1077.       redirector
  1078.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  1079.       only supports AL=00h-27h
  1080. --------d-2F1100SFDADA-----------------------
  1081. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  1082.     AX = 1100h subfn DADAh
  1083.     STACK: WORD DADAh
  1084. Return: AL = status
  1085.         00h not installed, OK to install
  1086.         STACK unchanged
  1087.         01h not installed, not OK to install
  1088.         STACK unchanged
  1089.         FFh installed
  1090.         STACK: WORD    ADADh if MSCDEX installed
  1091.                 DADBh if Lotus CD/Networker installed
  1092. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  1093.       than DADAh is considered to mean that MSCDEX is already installed;
  1094.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  1095.       thinking it is already installed when it is in fact CD/Networker
  1096.       that is installed
  1097. Index:    installation check;Lotus CD/Networker
  1098. Index:    Lotus CD/Networker;installation check
  1099. --------N-2F1101-----------------------------
  1100. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  1101.     AX = 1101h
  1102.     SS = DOS DS
  1103.     SDA first filename pointer -> fully-qualified directory name
  1104.     SDA CDS pointer -> current directory structure for drive with dir
  1105. Return: CF set on error
  1106.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1107.     CF clear if successful
  1108. Note:    this function is called by the DOS 3.1+ kernel
  1109. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  1110. --------N-2F1102-----------------------------
  1111. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  1112.     AX = 1102h
  1113.     SS = DOS DS
  1114.     SDA first filename pointer -> fully-qualified directory name
  1115.     SDA CDS pointer -> current directory structure for drive with dir
  1116. Return: CF set on error
  1117.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1118.     CF clear if successful
  1119. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  1120.       this function "SEQ_RMDIR"
  1121. SeeAlso: AX=1101h
  1122. --------N-2F1103-----------------------------
  1123. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  1124.     AX = 1103h
  1125.     SS = DOS DS
  1126.     SDA first filename pointer -> fully-qualified directory name
  1127.     SDA CDS pointer -> current directory structure for drive with dir
  1128. Return: CF set on error
  1129.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1130.     CF clear if successful
  1131. Note:    this function is called by the DOS 3.1+ kernel
  1132. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  1133. --------N-2F1104-----------------------------
  1134. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  1135.     AX = 1104h
  1136.     SS = DOS DS
  1137.     SDA first filename pointer -> fully-qualified directory name
  1138.     SDA CDS pointer -> current directory structure for drive with dir
  1139. Return: CF set on error
  1140.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1141.     CF clear if successful
  1142. Note:    appears to be identical to AX=1103h
  1143. SeeAlso: AX=1103h
  1144. --------N-2F1105-----------------------------
  1145. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  1146.     AX = 1105h
  1147.     SS = DOS DS
  1148.     SDA first filename pointer -> fully-qualified directory name
  1149.     SDA CDS pointer -> current directory structure for drive with dir
  1150. Return: CF set on error
  1151.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1152.     CF clear if successful
  1153.         CDS updated with new path
  1154. Notes:    this function is called by the DOS 3.1+ kernel
  1155.     directory string in CDS should not have a terminating backslash unless
  1156.       the current directory is the root
  1157. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  1158. --------N-2F1106-----------------------------
  1159. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  1160.     AX = 1106h
  1161.     BX = device info word from SFT
  1162.     ES:DI -> SFT
  1163.         SFT DPB field -> DPB of drive containing file
  1164. Return: CF set on error
  1165.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1166.     CF clear if successful
  1167.         SFT updated (redirector must decrement open count, which may be
  1168.           done with INT 2F/AX=1208h)
  1169. Note:    this function is called by the DOS 3.1+ kernel
  1170. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  1171. --------N-2F1107-----------------------------
  1172. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  1173.     AX = 1107h
  1174.     ES:DI -> SFT
  1175.         SFT DPB field -> DPB of drive containing file
  1176. Return: CF set on error
  1177.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1178.     CF clear if successful
  1179.         all buffers for file flushed
  1180.         directory entry updated
  1181. Note:    this function is called by the DOS 3.1+ kernel
  1182. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  1183. --------N-2F1108-----------------------------
  1184. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  1185.     AX = 1108h
  1186.     ES:DI -> SFT
  1187.         SFT DPB field -> DPB of drive containing file
  1188.     CX = number of bytes
  1189.     SS = DOS DS
  1190.     SDA DTA field -> user buffer
  1191. Return: CF set on error
  1192.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1193.     CF clear if successful
  1194.         CX = number of bytes read (0000h = end of file)
  1195.         SFT updated
  1196. Note:    this function is called by the DOS 3.1+ kernel
  1197. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  1198. --------N-2F1109-----------------------------
  1199. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  1200.     AX = 1109h
  1201.     ES:DI -> SFT
  1202.         SFT DPB field -> DPB of drive containing file
  1203.     CX = number of bytes
  1204.     SS = DOS DS
  1205.     SDA DTA field -> user buffer
  1206. Return: CF set on error
  1207.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1208.     CF clear if successful
  1209.         CX = number of bytes written
  1210.         SFT updated
  1211. Notes:    this function is called by the DOS 3.1+ kernel
  1212.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  1213.       the Device Driver Header field points at PCACHE, but does not
  1214.       intercept any other network redirector functions
  1215. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  1216. --------N-2F110A-----------------------------
  1217. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  1218.     AX = 110Ah
  1219.     BX = file handle
  1220.     CX:DX = starting offset
  1221.     SI = high word of size
  1222.     STACK: WORD low word of size
  1223.     ES:DI -> SFT
  1224.         SFT DPB field -> DPB of drive containing file
  1225.     SS = DOS DS
  1226. Return: CF set on error
  1227.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  1228.     STACK unchanged
  1229. Notes:    this function is called by the DOS 3.10-3.31 kernel
  1230.     the redirector is expected to resolve lock conflicts
  1231. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1232. --------N-2F110A-----------------------------
  1233. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  1234.     AX = 110Ah
  1235.     BL = function
  1236.         00h lock
  1237.         01h unlock
  1238.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  1239.     DS:DX -> parameter block (see #1391)
  1240.     ES:DI -> SFT
  1241.         SFT DPB field -> DPB of drive containing file
  1242.     SS = DOS DS
  1243. Return: CF set on error
  1244.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  1245. Notes:    this function is called by the DOS 4.0+ kernel
  1246.     the redirector is expected to resolve lock conflicts
  1247. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  1248.  
  1249. Format of parameter block entry [array, but currently limited to single entry]:
  1250. Offset    Size    Description    (Table 1391)
  1251.  00h    DWORD    start offset
  1252.  04h    DWORD    size of region
  1253. --------N-2F110B-----------------------------
  1254. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  1255.     AX = 110Bh
  1256.     BX = file handle
  1257.     CX:DX = starting offset
  1258.     SI = high word of size
  1259.     STACK: WORD low word of size
  1260.     ES:DI -> SFT for file
  1261.         SFT DPB field -> DPB of drive containing file
  1262. Return: CF set on error
  1263.        AL = DOS error code (see #0885 at INT 21/AH=59h)
  1264.     STACK unchanged
  1265. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  1266. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  1267. --------N-2F110C-----------------------------
  1268. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  1269.     AX = 110Ch
  1270.     ES:DI -> current directory structure for desired drive
  1271. Return: CF clear if data valid
  1272.         AL = sectors per cluster
  1273.         AH = media ID byte
  1274.         BX = total clusters
  1275.         CX = bytes per sector
  1276.         DX = number of available clusters
  1277.     CF set if data invalid
  1278. Note:    this function is called by the DOS 3.1+ kernel
  1279. SeeAlso: INT 21/AH=36h
  1280. --------N-2F110D-----------------------------
  1281. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  1282.     AX = 110Dh
  1283.     SDA first filename pointer -> name of file
  1284.     ???
  1285. Return: ???
  1286. Note:    similar to AX=110Eh
  1287. SeeAlso: AX=110Eh
  1288. --------N-2F110E-----------------------------
  1289. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  1290.     AX = 110Eh
  1291.     SS = DOS DS
  1292.     SDA first filename pointer -> fully-qualified name of file
  1293.     SDA CDS pointer -> current directory structure for drive with file
  1294.     STACK: WORD new file attributes
  1295. Return: CF set on error
  1296.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1297.     CF clear if successful
  1298.     STACK unchanged
  1299. Note:    this function is called by the DOS 3.1+ kernel
  1300. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  1301. --------N-2F110F-----------------------------
  1302. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1303.     AX = 110Fh
  1304.     SS = DOS DS
  1305.     SDA first filename pointer -> fully-qualified name of file
  1306.     SDA CDS pointer -> current directory structure for drive with file
  1307. Return: CF set on error
  1308.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1309.     CF clear if successful
  1310.         AX = file attributes
  1311.         BX:DI = file size
  1312. Note:    this function is called by the DOS 3.1+ kernel
  1313. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  1314. --------N-2F1110-----------------------------
  1315. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  1316.     AX = 1110h
  1317.     SDA first filename pointer -> name of file
  1318.     ???
  1319. Return: ???
  1320. Note:    appears to be similar to AX=110Fh
  1321. SeeAlso: AX=110Eh
  1322. --------N-2F1111-----------------------------
  1323. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  1324.     AX = 1111h
  1325.     SS = DS = DOS DS
  1326.     SDA first filename pointer = offset of fully-qualified old name
  1327.     SDA second filename pointer = offset of fully-qualified new name
  1328.     SDA CDS pointer -> current directory structure for drive with file
  1329. Return: CF set on error
  1330.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1331.     CF clear if successful
  1332. Note:    this function is called by the DOS 3.1+ kernel
  1333. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  1334. --------N-2F1112-----------------------------
  1335. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  1336.     AX = 1112h
  1337.     SS = DS = DOS DS
  1338.     SDA first filename pointer -> name of file
  1339.     ???
  1340. Return: ???
  1341. Note:    similar to AX=1111h
  1342. SeeAlso: AX=1111h
  1343. --------N-2F1113-----------------------------
  1344. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  1345.     AX = 1113h
  1346.     SS = DS = DOS DS
  1347.     SDA first filename pointer -> fully-qualified filename in DOS DS
  1348.     SDA CDS pointer -> current directory structure for drive with file
  1349. Return: CF set on error
  1350.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1351.     CF clear if successful
  1352. Notes:    this function is called by the DOS 3.1+ kernel
  1353.     the filespec may contain wildcards
  1354. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  1355. --------N-2F1114-----------------------------
  1356. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  1357.     AX = 1114h
  1358.     SDA first filename pointer -> name of file
  1359.     ???
  1360. Return: ???
  1361. Note:    similar to AX=1113h
  1362. SeeAlso: AX=1113h
  1363. --------N-2F1115-----------------------------
  1364. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  1365.     AX = 1115h
  1366.     SS = DOS DS
  1367.     ES:DI -> SFT ???
  1368.     ???
  1369. Return: ???
  1370. Note:    similar to AX=1116h
  1371. SeeAlso: AX=1116h,AX=112Eh
  1372. --------N-2F1116-----------------------------
  1373. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  1374.     AX = 1116h
  1375.     ES:DI -> uninitialized SFT
  1376.     SS = DOS DS
  1377.     SDA first filename pointer -> fully-qualified name of file to open
  1378.     STACK: WORD file access and sharing modes (see #0627 at INT 21/AH=3Dh)
  1379. Return: CF set on error
  1380.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1381.     CF clear if successful
  1382.         SFT filled (except handle count, which DOS manages itself)
  1383.     STACK unchanged
  1384. Note:    this function is called by the DOS 3.1+ kernel
  1385. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  1386. SeeAlso: INT 21/AH=60h
  1387. --------N-2F1117-----------------------------
  1388. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  1389.     AX = 1117h
  1390.     ES:DI -> uninitialized SFT
  1391.     SS = DOS DS
  1392.     SDA first filename pointer -> fully-qualified name of file to open
  1393.     SDA CDS pointer -> current directory structure for drive with file
  1394.     STACK: WORD file creation mode
  1395.             low byte = file attributes (see #0626 at INT 21/AH=3Ch)
  1396.             high byte = 00h normal create, 01h create new file
  1397. Return: CF set on error
  1398.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1399.     CF clear if successful
  1400.         SFT filled (except handle count, which DOS manages itself)
  1401.     STACK unchanged
  1402. Note:    this function is called by the DOS 3.1+ kernel
  1403. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  1404. --------N-2F1118-----------------------------
  1405. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  1406.     AX = 1118h
  1407.     ES:DI -> uninitialized SFT
  1408.     SS = DOS DS
  1409.     SDA first filename pointer -> fully-qualified name of file
  1410.     STACK: WORD file creation mode
  1411.             low byte = file attributes
  1412.             high byte = 00h normal create, 01h create new file
  1413. Return: ???
  1414.     STACK unchanged
  1415. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  1416.       on a drive for which the SDA CDS pointer has offset FFFFh
  1417. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  1418. --------N-2F1119-----------------------------
  1419. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  1420.     AX = 1119h
  1421.     SS = DS = DOS DS
  1422.     [DTA] = uninitialized 21-byte findfirst search data
  1423.           (see #0839 at INT 21/AH=4Eh)
  1424.     SDA first filename pointer -> fully-qualified search template
  1425.     SDA search attribute = attribute mask for search
  1426. Return: CF set on error
  1427.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1428.     CF clear if successful
  1429.         [DTA] = updated findfirst search data
  1430.             (bit 7 of first byte must be set)
  1431.         [DTA+15h] = standard directory entry for file
  1432. Notes:    this function is called by the DOS 3.1+ kernel
  1433.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  1434. SeeAlso: AX=111Ah,AX=111Bh
  1435. --------N-2F111A-----------------------------
  1436. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  1437.     AX = 111Ah
  1438.     ???
  1439. Return: CF set
  1440.         AX = error code (03h for DOS 4.01 IFSFUNC)
  1441. Note:    use AX=111Ch for DOS 5+
  1442. SeeAlso: AX=1119h,AX=111Ch
  1443. --------N-2F111B-----------------------------
  1444. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  1445.     AX = 111Bh
  1446.     SS = DS = DOS DS
  1447.     [DTA] = uninitialized 21-byte findfirst search data
  1448.           (see #0839 at INT 21/AH=4Eh)
  1449.     SDA first filename pointer -> fully-qualified search template
  1450.     SDA CDS pointer -> current directory structure for drive with file
  1451.     SDA search attribute = attribute mask for search
  1452. Return: CF set on error
  1453.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1454.     CF clear if successful
  1455.         [DTA] = updated findfirst search data
  1456.             (bit 7 of first byte must be set)
  1457.         [DTA+15h] = standard directory entry for file
  1458. Note:    this function is called by the DOS 3.1+ kernel
  1459. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  1460. --------N-2F111C-----------------------------
  1461. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  1462.     AX = 111Ch
  1463.     SS = DS = DOS DS
  1464.     ES:DI -> CDS
  1465.     [DTA] = 21-byte findfirst search data
  1466.           (see #0839 at INT 21/AH=4Eh)
  1467. Return: CF set on error
  1468.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1469.     CF clear if successful
  1470.         [DTA] = updated findfirst search data
  1471.             (bit 7 of first byte must be set)
  1472.         [DTA+15h] = standard directory entry for file
  1473. Note:    this function is called by the DOS 3.1+ kernel
  1474. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  1475. --------N-2F111D-----------------------------
  1476. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  1477.     AX = 111Dh
  1478.     SS = DOS DS
  1479.     SDA PSP segment field = PSP of terminating process
  1480. Return: nothing
  1481. Notes:    used when a process is aborted; the process being terminated is
  1482.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  1483.     this function is called by the DOS 3.1+ kernel
  1484.     closes all FCBs opened by process
  1485. SeeAlso: INT 21/AX=5D04h
  1486. --------N-2F111E-----------------------------
  1487. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  1488.     AX = 111Eh
  1489.     SS = DOS DS
  1490.     STACK: WORD function to execute
  1491.         5F00h  get redirection mode
  1492.             BL = type (03h printer, 04h disk)
  1493.             Return: BH = state (00h off, 01h on)
  1494.         5F01h  set redirection mode
  1495.             BL = type (03h printer, 04h disk)
  1496.             BH = state (00h off, 01h on)
  1497.         5F02h  get redirection list entry
  1498.             BX = redirection list index
  1499.             DS:SI -> 16-byte local device name buffer
  1500.             ES:DI -> 128-byte network name buffer
  1501.             Return: must set user's BX to device type and CX to
  1502.                 stored parameter value, using AX=1218h to get
  1503.                 stack frame address
  1504.         5F03h  redirect device
  1505.             BL = device type (see INT 21/AX=5F03h)
  1506.             CX = stored parameter value
  1507.             DS:SI -> ASCIZ source device name
  1508.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  1509.         5F04h  cancel redirection
  1510.             DS:SI -> ASCIZ device name or network path
  1511.         5F05h  get redirection list extended entry
  1512.             BX = redirection list index
  1513.             DS:SI -> buffer for ASCIZ source device name
  1514.             ES:DI -> buffer for destination ASCIZ network path
  1515.             Return: BH = status flag
  1516.                 BL = type (03h printer, 04h disk)
  1517.                 CX = stored parameter value
  1518.                 BP = NETBIOS local session number
  1519.         5F06h  similar to 5F05h???
  1520. Return: CF set on error
  1521.         AX = error code (see #0885 at INT 21/AH=59h)
  1522.     STACK unchanged
  1523. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  1524.       (including LAN Manager calls)
  1525.     the PC Network 1.00 redirector does not support function 5F06h
  1526. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  1527. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  1528. --------N-2F111F-----------------------------
  1529. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  1530.     AX = 111Fh
  1531.     STACK: WORD function
  1532.         5E02h  set printer setup
  1533.         5E03h  get printer setup
  1534.         5E04h  set printer mode
  1535.         5E05h  get printer mode
  1536. Return: CF set on error
  1537.         AX = error code (see #0885 at INT 21/AH=59h)
  1538.     STACK unchanged
  1539. Note:    this function is called by the DOS 3.1+ kernel
  1540. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  1541. --------N-2F1120-----------------------------
  1542. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  1543.     AX = 1120h
  1544.     DS = DOS DS
  1545.     ???
  1546. Return: CF clear (successful)
  1547. Notes:    this function is called by the DOS 3.1+ kernel
  1548.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  1549. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  1550. --------N-2F1121-----------------------------
  1551. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  1552.     AX = 1121h
  1553.     CX:DX = offset (in bytes) from end
  1554.     ES:DI -> SFT
  1555.         SFT DPB field -> DPB of drive with file
  1556.     SS = DOS DS
  1557. Return: CF set on error
  1558.         AL = DOS error code (see #0885 at INT 21/AH=59h)
  1559.     CF clear if successful
  1560.         DX:AX = new file position
  1561. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  1562.       from the end of a file opened with sharing modes set in such a
  1563.       manner that another process is able to change the size of the file
  1564.       while it is already open
  1565. SeeAlso: AX=1228h,INT 21/AH=42h
  1566. --------N-2F1122-----------------------------
  1567. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  1568.     AX = 1122h
  1569.     SS = DOS DS
  1570.     DS = PSP of process about to terminate
  1571. Return: ???
  1572. Notes:    this function is called by the DOS 3.1+ kernel
  1573.     after calling this function, the kernel calls INT 2F/AX=111Dh
  1574. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  1575. --------N-2F1123-----------------------------
  1576. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  1577.     AX = 1123h
  1578.     DS:SI -> ASCIZ filename to canonicalize
  1579.     ES:DI -> 128-byte buffer for qualified name
  1580. Return: CF set if not resolved
  1581. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  1582.       filename matches the name of a character device
  1583.     called first when DOS attempts to resolve a filename (unless inside an
  1584.       AX=5D00h server call); if this fails, DOS resolves the name locally
  1585. SeeAlso: AX=1221h,INT 21/AH=60h
  1586. --------N-2F1124-----------------------------
  1587. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  1588.     AX = 1124h
  1589.     ES:DI -> SFT
  1590.     SS = DOS DS
  1591.     ???
  1592. Return: CX = ???
  1593. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  1594. SeeAlso: AX=1126h
  1595. --------N-2F1125-----------------------------
  1596. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  1597.     AX = 1125h
  1598.     STACK: WORD subfunction
  1599.         5D07h get print stream state
  1600.             Return: DL = current state
  1601.         5D08h set print stream state
  1602.             DL = new state
  1603.         5D09h finish print job
  1604. Return: CF set on error
  1605.         AX = error code (see #0885 at INT 21/AH=59h)
  1606.     STACK unchanged
  1607. Note:    this function is called by the DOS 3.1+ kernel
  1608. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  1609. --------N-2F1126-----------------------------
  1610. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  1611.     AX = 1126h
  1612.     ES:DI -> SFT for file handle 4???
  1613.     SS = DOS DS???
  1614.     ???
  1615. Return: CF set on error
  1616. Notes:    this function is called by the DOS 3.1+ kernel
  1617.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  1618.       bit 11 of the device information word in the SFT set
  1619. SeeAlso: AX=1124h
  1620. --------N-2F1127-----------------------------
  1621. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1622.     AX = 1127h
  1623. Return: CF set
  1624.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  1625. --------N-2F1128-----------------------------
  1626. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1627.     AX = 1128h
  1628. Return: CF set
  1629.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  1630. --------N-2F1129-----------------------------
  1631. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  1632.     AX = 1129h
  1633. Return: CF set
  1634.         AX = 0001h (invalid function) (see #0885 at INT 21/AH=59h)
  1635. --------N-2F112A-----------------------------
  1636. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  1637.     AX = 112Ah
  1638.     DS = DOS DS
  1639.     ???
  1640. Return: ???
  1641. Note:    does something to each IFS driver
  1642. --------N-2F112B-----------------------------
  1643. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  1644.     AX = 112Bh
  1645.     SS = DOS DS
  1646.     CX = function/category
  1647.     DS:DX -> parameter block
  1648.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  1649.     ???
  1650. Return: CF set on error
  1651.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1652.     CF clear if successful
  1653. Note:    this function is called by the DOS 4.0 kernel
  1654. --------N-2F112C-----------------------------
  1655. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  1656.     AX = 112Ch
  1657.     SS = DOS DS
  1658.     SDA current SFT pointer -> SFT for file
  1659.     ???
  1660. Return: CF set on error
  1661. Note:    called by SHARE in DOS 5.0-6.0
  1662. --------N-2F112D-----------------------------
  1663. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  1664.     AX = 112Dh
  1665.     BL = subfunction (value of AL on INT 21)
  1666.         02h get extended attributes
  1667.         03h get extended attribute properties
  1668.         04h set extended attributes
  1669.         Return: CF clear
  1670.         else ???
  1671.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1672.     ES:DI -> SFT for file
  1673.     SS = DOS DS
  1674. Return: DS = DOS DS
  1675. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  1676.       INT 21/AX=5703h, and INT 21/AX=5704h
  1677. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  1678. --------N-2F112E-----------------------------
  1679. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  1680.     AX = 112Eh
  1681.     SS = DS = DOS DS
  1682.     ES:DI -> uninitialized SFT for file
  1683.     STACK: WORD file attribute for created/truncated file
  1684.             low byte = file attributes
  1685.             high byte = 00h normal create/open, 01h create new file
  1686.     SDA first filename pointer -> fully-qualified filename
  1687.     SDA extended file open action = action code
  1688.           (see #0966 at INT 21/AX=6C00h)
  1689.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  1690. Return: CF set on error
  1691.         AX = error code
  1692.     CF clear if successful
  1693.         CX = result code
  1694.         01h file opened
  1695.         02h file created
  1696.         03h file replaced (truncated)
  1697.         SFT initialized (except handle count, which DOS manages itself)
  1698. Note:    this function is called by the DOS 4+ kernel
  1699. BUG:    this function is not called correctly under some DOS versions
  1700.       (at least 5.0 and 6.2):
  1701.         the file attribute on the stack is not correct if the action 
  1702.           code is 11h,
  1703.         the result code in CX is not passed back to the application.
  1704. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  1705. --------N-2F112F-----------------------------
  1706. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  1707.     AX = 112Fh
  1708.     SS = DOS DS
  1709.     STACK: WORD function in low byte
  1710.         00h ???
  1711.             DS:SI -> Current Directory Structure???
  1712.             CL = drive (1=A:)
  1713.         01h ???
  1714.             DS:SI -> ???
  1715.             CL = file handle???
  1716.         02h ???
  1717.             DS:SI -> Current Directory Structure???
  1718.             DI = ???
  1719.             CX = drive (1=A:)
  1720.     ???
  1721. Return: CF set on error
  1722.         AX = DOS error code (see #0885 at INT 21/AH=59h)
  1723.     CF clear if successful
  1724. Note:    this function is called by the DOS 4.0 kernel
  1725. SeeAlso: INT 21/AH=6Bh
  1726. --------N-2F1130-----------------------------
  1727. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  1728.     AX = 1130h
  1729. Return: ES = CS of resident IFSFUNC
  1730. --------N-2F1180-----------------------------
  1731. INT 2F - LAN Manager Enhanced DOS Services - ???
  1732.     AX = 1180h
  1733.     ???
  1734. Return: ???
  1735. --------N-2F1182-----------------------------
  1736. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  1737.     AX = 1182h
  1738.     ???
  1739. Return: ???
  1740. --------N-2F1184-----------------------------
  1741. INT 2F - LAN Manager Enhanced DOS - ???
  1742.     AX = 1184h
  1743.     ???
  1744. Return: ???
  1745. --------N-2F1186-----------------------------
  1746. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  1747.     AX = 1186h
  1748.     DS:SI -> stack frame (see #1392)
  1749. Return: CF clear if successful
  1750.     CF set if error
  1751.         AX = error code
  1752. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  1753.       file/printer services
  1754. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  1755.  
  1756. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  1757. Offset    Size    Description    (Table 1392)
  1758.  00h    DWORD    -> number of bytes read
  1759.  04h    WORD    size of buffer
  1760.  06h    DWORD    -> buffer
  1761.  0Ah    DWORD    -> return code
  1762.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1763.  12h    WORD    handle
  1764. --------N-2F118A-----------------------------
  1765. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  1766.     AX = 118Ah
  1767.     BX = function (0000h or 0001h)
  1768. Return: CF clear if successful
  1769.         AX = 1100h success
  1770.     CF set if error
  1771.         AX = 0001h, etc.
  1772. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  1773. --------N-2F118B-----------------------------
  1774. INT 2F - LAN Manager Enhanced DOS - ???
  1775.     AX = 118Bh
  1776.     ???
  1777. Return: ???
  1778. --------N-2F118C-----------------------------
  1779. INT 2F - LAN Manager Enhanced DOS - ???
  1780.     AX = 118Ch
  1781.     ???
  1782. Return: ???
  1783. --------N-2F118E-----------------------------
  1784. INT 2F - LAN Manager Enhanced DOS - ???
  1785.     AX = 118Eh
  1786.     ???
  1787. Return: ???
  1788. --------N-2F118F-----------------------------
  1789. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  1790.     AX = 118Fh
  1791.     DS:SI -> stack frame (see #1393)
  1792. Return: CF clear if successful
  1793.     CF set if error
  1794.         AX = error code
  1795. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  1796.  
  1797. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  1798. Offset    Size    Description    (Table 1393)
  1799.  00h    DWORD    -> number of bytes read
  1800.  04h    WORD    Size of buffer
  1801.  06h    DWORD    -> buffer
  1802.  0Ah    DWORD    -> return code
  1803.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1804.  12h    WORD    handle
  1805. --------N-2F1190-----------------------------
  1806. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  1807.     AX = 1190h
  1808.     DS:SI -> stack frame (see #1394)
  1809. Return: CF clear if successful
  1810.     CF set if error
  1811.         AX = error code
  1812. SeeAlso: AX=1186h,AX=1191h
  1813.  
  1814. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  1815. Offset    Size    Description    (Table 1394)
  1816.  00h    DWORD    -> number of bytes read
  1817.  04h    WORD    size of buffer
  1818.  06h    DWORD    -> buffer
  1819.  0Ah    DWORD    -> return code
  1820.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1821.  12h    WORD    handle
  1822.  14h    DWORD    ???
  1823. --------N-2F1191-----------------------------
  1824. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  1825.     AX = 1191h
  1826.     DS:SI -> stack frame (see #1395)
  1827. Return: CF clear if successful
  1828.     CF set if error
  1829.         AX = error code
  1830. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  1831.  
  1832. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  1833. Offset    Size    Description    (Table 1395)
  1834.  00h    DWORD    -> number of bytes read
  1835.  04h    WORD    size of buffer
  1836.  06h    DWORD    -> buffer
  1837.  0Ah    DWORD    -> return code
  1838.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  1839.  12h    WORD    handle
  1840.  14h    DWORD    ???
  1841. --------D-2F1200-----------------------------
  1842. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  1843.     AX = 1200h
  1844. Return: AL = FFh (for compatibility with other INT 2F functions)
  1845. --------D-2F1201-----------------------------
  1846. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  1847.     AX = 1201h
  1848.     SS = DOS DS (must be using a DOS internal stack)
  1849.     SDA current SFT pointer -> SFT of file to close
  1850. Return: CF set on error
  1851.     BX???
  1852.     CX new reference count of SFT
  1853.     ES:DI -> SFT for file
  1854. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  1855. --------D-2F1202-----------------------------
  1856. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  1857.     AX = 1202h
  1858.     STACK: WORD vector number
  1859. Return: ES:BX -> interrupt vector
  1860.     STACK unchanged
  1861. --------D-2F1203-----------------------------
  1862. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  1863.     AX = 1203h
  1864. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  1865. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  1866.       segment
  1867. --------D-2F1204-----------------------------
  1868. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  1869.     AX = 1204h
  1870.     STACK: WORD character to normalize
  1871. Return: AL = normalized character (forward slash turned to backslash, all
  1872.           others unchanged)
  1873.     ZF set if path separator
  1874.     STACK unchanged
  1875. --------D-2F1205-----------------------------
  1876. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  1877.     AX = 1205h
  1878.     STACK: WORD character to output
  1879. Return: STACK unchanged
  1880. Note:    can be called only from within DOS
  1881. --------D-2F1206-----------------------------
  1882. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  1883.     AX = 1206h
  1884.     DI = error code
  1885.     BP:SI -> device driver header
  1886.     SS = DOS DS (must be using a DOS internal stack)
  1887.     STACK: WORD value to be passed to INT 24 in AX
  1888. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  1889.     STACK unchanged
  1890. SeeAlso: INT 24
  1891. --------D-2F1207-----------------------------
  1892. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  1893.     AX = 1207h
  1894.     DS:DI -> disk buffer
  1895. Return: nothing
  1896. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  1897.       recently used is first); under DOS 3.3, the buffer is then moved to
  1898.       the start of the disk buffer chain if it was marked unused
  1899. Notes:    can be called only from within DOS
  1900.     this function is nearly the same as AX=120Fh
  1901. SeeAlso: AX=120Fh
  1902. --------D-2F1208-----------------------------
  1903. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  1904.     AX = 1208h
  1905.     ES:DI -> SFT
  1906. Return: AX = original value of reference count
  1907. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  1908.       that the SFT is not in use).    It is the caller's responsibility to
  1909.       set the reference count to zero after cleaning up.
  1910.     used by network redirectors such as MSCDEX
  1911. SeeAlso: AX=1106h
  1912. --------D-2F1209-----------------------------
  1913. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  1914.     AX = 1209h
  1915.     DS:DI -> disk buffer
  1916. Return: disk buffer marked unused, contents written to disk if buffer dirty
  1917. Note:    can be called only from within DOS
  1918. SeeAlso: AX=120Eh,AX=1215h
  1919. --------D-2F120A-----------------------------
  1920. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  1921.     AX = 120Ah
  1922.     DS = SS = DOS DS (must be using a DOS internal stack)
  1923.     STACK: WORD extended error code
  1924. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  1925.     CF clear if retry, set otherwise
  1926.     STACK unchanged
  1927. Notes:    can only be called during a DOS function call, as it uses various
  1928.       fields in the SDA to set up the registers for the INT 24
  1929.     reportedly sets current DPB's first root directory sector to 1
  1930. SeeAlso: INT 24
  1931. --------D-2F120B-----------------------------
  1932. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  1933.     AX = 120Bh
  1934.     ES:DI -> system file table entry for previous open of file
  1935.     STACK: WORD extended error code (should be 20h--sharing violation)
  1936. Return: CF clear if operation should be retried
  1937.     CF set if operation should not be retried
  1938.         AX = error code (20h) (see #0885 at INT 21/AH=59h)
  1939.     STACK unchanged
  1940. Notes:    can only be called during a DOS function call
  1941.     should only be called if an attempt was made to open an already-open
  1942.       file contrary to the sharing rules
  1943.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  1944.       inheritance allowed
  1945. --------D-2F120C-----------------------------
  1946. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  1947.     AX = 120Ch
  1948.     SDA current SFT pointer -> SFT for file
  1949.     DS = DOS DS
  1950.     SS = DOS DS (must be using a DOS internal stack)
  1951. Return: ES, DI, AX destroyed
  1952. Notes:    invokes "device open" call on device driver for SFT
  1953.     changes owner of last-accessed SFT to calling process if it was opened
  1954.       via FCB
  1955.     called by network redirectors such as MSCDEX
  1956. --------D-2F120D-----------------------------
  1957. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  1958.     AX = 120Dh
  1959.     SS = DOS DS (must be using a DOS internal stack)
  1960. Return: AX = current date in packed format (see #0877 at INT 21/AX=5700h)
  1961.     DX = current time in packed format (see #0876 at INT 21/AX=5700h)
  1962. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  1963. --------D-2F120E-----------------------------
  1964. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  1965.     AX = 120Eh
  1966.     SS = DOS DS (must be using a DOS internal stack)
  1967. Return: DS:DI -> first disk buffer
  1968. Notes:    clears "referenced" flag on all disk buffers
  1969.     in DOS 5+, this has become essentially a NOP, invoking the same code
  1970.       used by AX=1224h (SHARING DELAY)
  1971. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  1972. --------D-2F120F-----------------------------
  1973. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  1974.     AX = 120Fh
  1975.     DS:DI -> disk buffer
  1976.     SS = DOS DS (must be using a DOS internal stack)
  1977. Return: DS:DI -> next buffer in buffer list
  1978. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  1979.       recently used is first); under DOS 3.3, the buffer is then moved to
  1980.       the start of the disk buffer chain if it was marked unused
  1981. Note:    this function is the same as AX=1207h except that it returns a
  1982.       pointer to the buffer following the specified buffer in the buffer
  1983.       chain
  1984. SeeAlso: AX=1207h
  1985. --------D-2F1210-----------------------------
  1986. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  1987.     AX = 1210h
  1988.     DS:DI -> first disk buffer to check
  1989. Return: ZF clear if found
  1990.         DS:DI -> first unreferenced disk buffer
  1991.     ZF set if not found
  1992. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  1993.       used by AX=1224h (SHARING DELAY)
  1994. SeeAlso: AX=120Eh
  1995. --------D-2F1211-----------------------------
  1996. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  1997.     AX = 1211h
  1998.     DS:SI -> ASCIZ filename to normalize
  1999.     ES:DI -> buffer for normalized filename
  2000. Return: destination buffer filled with uppercase filename, with slashes turned
  2001.     to backslashes
  2002. SeeAlso: AX=121Eh,AX=1221h
  2003. --------D-2F1212-----------------------------
  2004. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2005.     AX = 1212h
  2006.     ES:DI -> ASCIZ string
  2007. Return: CX = length of string
  2008. SeeAlso: AX=1225h
  2009. --------D-2F1213-----------------------------
  2010. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  2011.     AX = 1213h
  2012.     STACK: WORD character to convert to uppercase
  2013. Return: AL = uppercase character
  2014.     STACK unchanged
  2015. --------D-2F1214-----------------------------
  2016. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  2017.     AX = 1214h
  2018.     DS:SI = first pointer
  2019.     ES:DI = second pointer
  2020. Return: ZF set if pointers are equal, ZF clear if not equal
  2021. --------D-2F1215-----------------------------
  2022. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  2023.     AX = 1215h
  2024.     DS:DI -> disk buffer
  2025.     SS = DOS DS (must be using a DOS internal stack)
  2026.     STACK: WORD drives for which to skip buffer
  2027.         ignore buffer if drive same as high byte, or bytes differ and
  2028.           the buffer is for a drive OTHER than that given in low byte
  2029. Return: STACK unchanged
  2030. Note:    can be called only from within DOS
  2031. SeeAlso: AX=1209h
  2032. --------D-2F1216-----------------------------
  2033. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  2034.     AX = 1216h
  2035.     BX = system file table entry number
  2036. Return: CF clear if successful
  2037.         ES:DI -> system file table entry
  2038.     CF set if BX greater than FILES=
  2039. Note:    supported by DR-DOS 5+
  2040. SeeAlso: AX=1220h
  2041. --------D-2F1217-----------------------------
  2042. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  2043.     AX = 1217h
  2044.     SS = DOS DS (must be using a DOS internal stack)
  2045.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  2046. Return: CF set on error
  2047.         (drive > LASTDRIVE)
  2048.     CF clear if successful
  2049.         DS:SI -> current directory structure for specified drive
  2050.     STACK unchanged
  2051. SeeAlso: AX=1219h
  2052. --------D-2F1218-----------------------------
  2053. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  2054.     AX = 1218h
  2055. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  2056. Note:    only valid while within DOS
  2057. --------D-2F1219-----------------------------
  2058. INT 2F U - DOS 3+ internal - SET DRIVE???
  2059.     AX = 1219h
  2060.     SS = DOS DS (must be using a DOS internal stack)
  2061.     STACK: WORD drive (0 = default, 1 = A:, etc)
  2062. Return: ???
  2063.     STACK unchanged
  2064. Notes:    calls AX=1217h
  2065.     builds a current directory structure if inside server call
  2066.       (INT 21/AX=5D00h)
  2067. SeeAlso: AX=1217h,AX=121Fh
  2068. --------D-2F121A-----------------------------
  2069. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  2070.     AX = 121Ah
  2071.     DS:SI -> filename
  2072. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  2073.     DS:SI -> filename without leading X: (if present)
  2074. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  2075. --------D-2F121B-----------------------------
  2076. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  2077.     AX = 121Bh
  2078.     CL = year - 1980
  2079. Return: AL = number of days in February
  2080. Note:    requires DS to be set to the DOS data segment
  2081. SeeAlso: INT 21/AH=2Bh
  2082. --------D-2F121C-----------------------------
  2083. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  2084.     AX = 121Ch
  2085.     DS:SI -> start of memory to checksum
  2086.     CX = number of bytes
  2087.     DX = initial checksum
  2088.     SS = DOS DS (must be using a DOS internal stack)
  2089. Return: AX, CX destroyed
  2090.     DX = checksum
  2091.     DS:SI -> first byte after checksummed range
  2092. Notes:    used by DOS to determine day count since 1/1/80 given a date
  2093.     supported by DR-DOS 5.0+
  2094. SeeAlso: AX=121Dh
  2095. --------D-2F121D-----------------------------
  2096. INT 2F U - DOS 3+ internal - SUM MEMORY
  2097.     AX = 121Dh
  2098.     DS:SI -> memory to add up
  2099.     CX = 0000h
  2100.     DX = limit
  2101. Return: AL = byte which exceeded limit
  2102.     CX = number of bytes before limit exceeded
  2103.     DX = remainder after adding first CX bytes
  2104.     DS:SI -> byte beyond the one which exceeded the limit
  2105. Notes:    used by DOS to determine year or month given day count since 1/1/80
  2106.     supported by DR-DOS 5.0+
  2107. SeeAlso: AX=121Ch
  2108. --------D-2F121E-----------------------------
  2109. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  2110.     AX = 121Eh
  2111.     DS:SI -> first ASCIZ filename
  2112.     ES:DI -> second ASCIZ filename
  2113. Return: ZF set if filenames equivalent, ZF clear if not
  2114. Note:    supported by DR-DOS 5.0+
  2115. SeeAlso: AX=1211h,AX=1221h
  2116. --------D-2F121F-----------------------------
  2117. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  2118.     AX = 121Fh
  2119.     SS = DOS DS (must be using a DOS internal stack)
  2120.     STACK: WORD drive letter
  2121. Return: ES:DI -> current directory structure (will be overwritten by next call)
  2122.     STACK unchanged
  2123. --------D-2F1220-----------------------------
  2124. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  2125.     AX = 1220h
  2126.     BX = file handle
  2127. Return: CF set on error
  2128.         AL = 6 (invalid file handle)
  2129.     CF clear if successful
  2130.         ES:DI -> JFT entry for file handle in current process
  2131. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  2132.       file handle, or FFh if the handle is not open
  2133.     supported by DR-DOS 5.0+
  2134. SeeAlso: AX=1216h,AX=1229h
  2135. --------D-2F1221-----------------------------
  2136. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  2137.     AX = 1221h
  2138.     DS:SI -> file name to be fully qualified
  2139.     ES:DI -> 128-byte buffer for resulting canonical file name
  2140.     SS = DOS DS (must be using a DOS internal stack)
  2141. Return: (see INT 21/AH=60h)
  2142. Note:    identical to INT 21/AH=60h
  2143. SeeAlso: AX=1123h,INT 21/AH=60h
  2144. --------D-2F1222-----------------------------
  2145. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  2146.     AX = 1222h
  2147.     SS = DOS data segment
  2148.     SS:SI -> 4-byte records
  2149.         BYTE    error code, FFh = last record
  2150.         BYTE    error class, FFh = don't change
  2151.         BYTE    suggested action, FFh = don't change
  2152.         BYTE    error locus, FFh = don't change
  2153.     SDA error code set
  2154. Return: SI destroyed
  2155.     SDA error class, error locus, and suggested action fields set
  2156. Note:    can be called only from within DOS
  2157. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  2158. --------D-2F1223-----------------------------
  2159. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  2160.     AX = 1223h
  2161.     DS = DOS DS
  2162.     SS = DOS DS (must be using a DOS internal stack)
  2163.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  2164.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  2165. Return: CF set if no character device by that name found
  2166.     CF clear if found
  2167.         BH = low byte of device attribute word
  2168. Note:    can only be called from within DOS
  2169. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  2170. --------D-2F1224-----------------------------
  2171. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  2172.     AX = 1224h
  2173.     SS = DOS DS (must be using a DOS internal stack)
  2174. Return: after delay set by INT 21/AX=440Bh, unless in server call
  2175.       (INT 21/AX=5D00h)
  2176. Note:    delay is dependent on the processor speed, and is skipped entirely if
  2177.       inside a server call
  2178. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  2179. --------D-2F1225-----------------------------
  2180. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  2181.     AX = 1225h
  2182.     DS:SI -> ASCIZ string
  2183. Return: CX = length of string
  2184. Note:    supported by DR-DOS 5.0+
  2185. SeeAlso: AX=1212h
  2186. --------D-2F1226-----------------------------
  2187. INT 2F U - DOS 3.3+ internal - OPEN FILE
  2188.     AX = 1226h
  2189.     CL = access mode
  2190.     DS:DX -> ASCIZ filename
  2191.     SS = DOS DS (must be using a DOS internal stack)
  2192. Return: CF set on error
  2193.         AL = error code (see #0885 at INT 21/AH=59h)
  2194.     CF clear if successful
  2195.         AX = file handle
  2196. Notes:    can only be called from within DOS
  2197.     equivalent to INT 21/AH=3Dh
  2198.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2199. SeeAlso: AX=1227h,INT 21/AH=3Dh
  2200. --------D-2F1227-----------------------------
  2201. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  2202.     AX = 1227h
  2203.     BX = file handle
  2204.     SS = DOS DS (must be using a DOS internal stack)
  2205. Return: CF set on error
  2206.         AL = 06h invalid file handle
  2207.     CF clear if successful
  2208. Notes:    can only be called from within DOS
  2209.     equivalent to INT 21/AH=3Eh
  2210.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2211. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  2212. --------D-2F1228BP4200-----------------------
  2213. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  2214.     AX = 1228h
  2215.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  2216.     BX = file handle
  2217.     CX:DX = offset in bytes
  2218.     SS = DOS DS (must be using a DOS internal stack)
  2219. Return: as for INT 21/AH=42h
  2220. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  2221.       function call
  2222.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2223.       LSEEK, and restores frame pointer
  2224.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2225. SeeAlso: INT 21/AH=42h
  2226. --------D-2F1229-----------------------------
  2227. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  2228.     AX = 1229h
  2229.     BX = file handle
  2230.     CX = number of bytes to read
  2231.     DS:DX -> buffer
  2232.     SS = DOS DS (must be using a DOS internal stack)
  2233. Return: as for INT 21/AH=3Fh
  2234. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  2235.       a DOS function call
  2236.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  2237. SeeAlso: AX=1226h,INT 21/AH=3Fh
  2238. --------D-2F122A-----------------------------
  2239. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  2240.     AX = 122Ah
  2241.     BX = entry point to set (0001h or 0002h)
  2242.     DS:SI -> FASTOPEN entry point (see #1396,#1397)
  2243.         (entry point not set if SI = FFFFh for DOS 4+)
  2244. Return: CF set if specified entry point already set
  2245. Notes:    entry point in BX is ignored under DOS 3.30
  2246.     both entry points set to same handler by DOS 4.01
  2247.     DOS 5.0 and 6.0 only set entry point 1
  2248.  
  2249. (Table 1396)
  2250. Values DOS 3.30+ FASTOPEN entry point is called with:
  2251.     AL = 01h  Lookup
  2252.         CX = ??? seems to be offset
  2253.         DI = ??? seems to be offset
  2254.         SI = offset in DOS DS of filename
  2255.     AL = 02h  insert file into FASTOPEN cache
  2256.     AL = 03h  delete file from FASTOPEN cache
  2257.         SI = offset in DOS DS of filename
  2258.     AL = 04h  purge FASTOPEN cache
  2259.         AH = subfunction (00h,01h,02h)
  2260.         ES:DI -> ???
  2261.         CX = ??? (subfunctions 01h and 02h only)
  2262. Returns: CF set on error or not installed
  2263. Note: function 03h calls function 01h first
  2264. SeeAlso: #1397,#1398
  2265.  
  2266. (Table 1397)
  2267. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  2268.     AL = 04h ???
  2269.         AH = 03h
  2270.         ???
  2271.     AL = 05h ???
  2272.     AL = 0Bh ???
  2273.     AL = 0Ch ???
  2274.     AL = 0Dh ???
  2275.     AL = 0Eh ???
  2276.     AL = 0Fh ???
  2277.     AL = 10h ???
  2278. SeeAlso: #1396,#1398
  2279.  
  2280. (Table 1398)
  2281. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  2282.     AL = 04h  purge FASTOPEN cache
  2283.         AH = 03h
  2284.         ???
  2285.     AL = 05h ???
  2286.         DL = drive (00h = A:)
  2287.         ???
  2288.     AL = 06h ???
  2289.         ???
  2290. SeeAlso: #1396,#1397
  2291. --------D-2F122B-----------------------------
  2292. INT 2F U - DOS 3.3+ internal - IOCTL
  2293.     AX = 122Bh
  2294.     BP = 44xxh
  2295.     SS = DOS DS (must be using a DOS internal stack)
  2296.     additional registers as appropriate for INT 21/AX=44xxh
  2297. Return: as for INT 21/AH=44h
  2298. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  2299.       a DOS function call
  2300.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  2301.       IOCTL, and restores frame pointer
  2302.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  2303. SeeAlso: INT 21/AH=44h
  2304. --------D-2F122C-----------------------------
  2305. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  2306.     AX = 122Ch
  2307. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  2308. Note:    although this function exists in DR-DOS 5.0 and Novell DOS 7, it
  2309.       always returns 0000h:0000h
  2310. SeeAlso: INT 21/AH=52h
  2311. --------D-2F122D-----------------------------
  2312. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  2313.     AX = 122Dh
  2314. Return: AX = current extended error code
  2315. SeeAlso: AX=1222h,INT 21/AH=59h
  2316. --------D-2F122E-----------------------------
  2317. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  2318.     AX = 122Eh
  2319.     DL = subfunction
  2320.         00h get standard DOS error table (see #1399)
  2321.         Return: ES:DI -> error table
  2322.                  (DOS 4: errors 00h-12h,50h-5Bh)
  2323.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  2324.         01h set standard DOS error table
  2325.         ES:DI -> error table
  2326.         02h get parameter error table (errors 00h-0Ah)
  2327.         Return: ES:DI -> error table
  2328.         03h set parameter error table
  2329.         ES:DI -> error table
  2330.         04h get critical/SHARE error table (errors 13h-2Bh)
  2331.         Return: ES:DI -> error table
  2332.         05h set critical/SHARE error table
  2333.         ES:DI -> error table
  2334.         06h get ??? error table
  2335.         Return: ES:DI -> error table or 0000h:0000h
  2336.         07h set ??? error table
  2337.         ES:DI -> error table
  2338.         08h get error message retriever (see #1400)
  2339.         Return: ES:DI -> FAR procedure to fetch error message
  2340.         09h set ??? error table
  2341.         ES:DI -> error table
  2342. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  2343.       the offset of the error message table within COMMAND.COM, and the
  2344.       procedure returned by DL=08h should be called
  2345.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  2346.       with DL odd are ignored); they are always returned with segment 0001h
  2347.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  2348.       into a single error table
  2349. SeeAlso: AX=0500h,INT 21/AH=59h
  2350.  
  2351. Format of DOS 4.x error table:
  2352. Offset    Size    Description    (Table 1399)
  2353.  00h    BYTE    FFh
  2354.  01h  2 BYTEs    04h,00h (DOS version???)
  2355.  03h    BYTE    number of error headers following
  2356.  04h 2N WORDs    table of all error headers for table
  2357.         Offset    Size    Description
  2358.          00h    WORD    error message number
  2359.          02h    WORD    offset of error message from start of header
  2360.                 error messages are count byte followed by msg
  2361. Note:    DOS 5 error tables consist of one word per error number; each word
  2362.       contains either the offset of a counted string or 0000h
  2363.  
  2364. (Table 1400)
  2365. Call error retrieval function with:
  2366.     AX = error number (see #1401)
  2367.     DI = offset of error table
  2368. Return: ES:DI -> error message (counted string)
  2369. Notes:    this function needs to access COMMAND.COM if the messages were not
  2370.       loaded into memory permanently with /MSG; the caller should assume
  2371.       that the returned message will be overwritten by the next call of
  2372.       the function
  2373.     supported by DR-DOS 5.0
  2374.  
  2375. (Table 1401)
  2376. Values for parameter errors:
  2377.  01h    Too many parameters
  2378.  02h    Required Parameter missing
  2379.  03h    Invalid switch
  2380.  04h    Invalid keyword
  2381.  06h    Parameter value not in allowed range
  2382.  07h    Parameter value not allowed
  2383.  08h    Parameter value not allowed
  2384.  09h    Parameter format not correct
  2385.  0Ah    Invalid parameter
  2386.  0Bh    Invalid parameter combination
  2387. --------D-2F122F-----------------------------
  2388. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  2389.     AX = 122Fh
  2390.     DX = DOS version number (0000h = return true DOS version)
  2391. Note:    not available under DR-DOS 5.0 or 6.0
  2392. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  2393. --------m-2F12FFBX0006-----------------------
  2394. INT 2F U - DR-DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  2395.     AX = 12FFh
  2396.     BX = 0006h
  2397.     DX = 0000h
  2398.     CX = function
  2399.         0000h get status of video memory space (MEMMAX /V)
  2400.         0001h map memory into video memory space (MEMMAX +V)
  2401.         0002h unmap memory from video memory space (MEMMAX -V)
  2402. Return: CF clear if successful
  2403.         AX = 0000h (successful)
  2404.         BX = segment of reserved video RAM
  2405.         CX = segment of used video RAM
  2406.         DX = segment of first upper MCB
  2407. Notes:    this functionality is provided by EMM386, and partially supported by
  2408.       HIDOS.SYS
  2409.     BL specifies which program handles the call, BH is the function number
  2410. SeeAlso: AX=D201h/BX=4849h
  2411. --------O-2F12FFBX0007-----------------------
  2412. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  2413.     AX = 12FFh
  2414.     BX = 0007h
  2415.     CX = 0000h
  2416. Return: CF clear if installed
  2417.         AX = 0000h
  2418.         BX = ??? (4426h)
  2419.         CX = ??? (0068h)
  2420.         DX = PSP segment of resident code???
  2421.         SI = ??? (4AFAh)
  2422.         ES = resident code segment
  2423. --------m-2F12FFBX0106-----------------------
  2424. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  2425.     AX = 12FFh
  2426.     BX = 0106h
  2427. Return:    CF clear if successful
  2428.         AX = 0000h (successful)
  2429.         BX = EDC0h (signature)
  2430.         CL = memory manager variant (02h,03h)
  2431.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  2432.         CH = ??? (00h)
  2433.         DX = version??? (0300h for v3.0)
  2434.         ES = segment of EMM386 low-memory stub
  2435. Notes:    BL specifies which program handles the call, BH is the function number
  2436.     if the word at ES:0012h is nonzero, if contains the offset within
  2437.       segment ES of the CEMM-compatible entry point (see #1402)
  2438.     if no other program has hooked INT 67, an alternate installation
  2439.       check is to test for the string
  2440.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  2441.       handler's segment; the word immediately preceding this string
  2442.       contains the offset of the API entry point if it is nonzero
  2443. Index:    entry point;Novell EMM386
  2444.  
  2445. (Table 1402)
  2446. Call Novell EMM386.EXE entry point with:
  2447.     AH = 00h get memory manager's status???
  2448.         ???
  2449.     AH = 01h set memory manager's status???
  2450.         ???
  2451.     AH = 02h Weitek coprocessor support???
  2452.         AL = subfunction???
  2453.     more functions???
  2454. SeeAlso: #0733 at INT 21/AX=4402h/SF=02h,#2271 at INT 67/AX=FFA5h
  2455. --------m-2F12FFBL06-------------------------
  2456. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  2457.     AX = 12FFh
  2458.     BL = 06h
  2459.     BH = function (02h-09h)
  2460.     ???
  2461. Return: ???
  2462. --------O-2F12FFBX0EDC-----------------------
  2463. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  2464.     AX = 12FFh
  2465.     BX = 0EDCh
  2466. Return: AX = 0000h if ??? loaded
  2467.         CF clear
  2468.         BX = 0000h
  2469. Notes:    called by Novell DOS 7 TaskMgr
  2470.     if this function returns with AX=0000h, then the code necessary to
  2471.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  2472.       available for use
  2473.     because the request is handled on the initial trap to the memory
  2474.       manager caused by INT instructions, this function must be invoked
  2475.       with an actual INT 2F instruction instead of some simulation such
  2476.       as a far call to the address in the interrupt vector table
  2477. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  2478. --------D-2F13-------------------------------
  2479. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  2480.     AH = 13h
  2481.     DS:DX -> interrupt handler disk driver calls on read/write
  2482.     ES:BX = address to restore INT 13 to on system halt (exit from root
  2483.          shell) or warm boot (INT 19)
  2484. Return: DS:DX set by previous invocation of this function
  2485.     ES:BX set by previous invocation of this function
  2486. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  2487.       original INT 13 handler.  The first is for disk change detection
  2488.       on floppy drives, the second is for tracking formatting calls and
  2489.       correcting DMA boundary errors, the third is for working around
  2490.       problems in a particular version of IBM's ROM BIOS
  2491.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  2492.       also points there unless IO.SYS has installed a special filter for
  2493.       hard disk reads (on systems with model byte FCh and BIOS date
  2494.       "01/10/84" only), in which case it points at the special filter
  2495.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  2496.       functions are still invoked via an INT 13 instruction
  2497.     this is a dangerous security loophole for any virus-monitoring software
  2498.       which does not trap this call ("INT13", "Nomenklatura", and many
  2499.       Bulgarian viruses are known to use it to get the original ROM entry
  2500.       point)
  2501. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  2502. --------N-2F13-------------------------------
  2503. INT 2F U - MS-NET - ???
  2504.     AH = 13h
  2505.     ???
  2506. Return: ???
  2507. Note:    supposedly used to move (or control the movement of) NCBs
  2508. --------U-2F1400-----------------------------
  2509. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  2510.     AX = 1400h
  2511. Return: AL = 00h not installed, OK to install
  2512.          01h not installed, not OK
  2513.          FFh installed
  2514. Notes:    this function is called by the DOS v3.3+ kernel
  2515.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2516.     supported by DR-DOS 5.0
  2517.     documented for MS-DOS 5+, but undocumented in prior versions
  2518. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  2519. --------D-2F1400-----------------------------
  2520. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  2521.     AX = 1400h
  2522. Return: AX = FFFFh if installed
  2523.         BX = maximum memory required to save screen and keyboard info
  2524.     CF clear if successful
  2525.     CF set on error
  2526.         AX = error code
  2527.         0002h invalid function
  2528.         0004h unknown error
  2529. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  2530.       to communicate with the user
  2531. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2532. --------U-2F1401-----------------------------
  2533. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  2534.     AX = 1401h
  2535.     DS:SI -> internal code page structure (see #1403)
  2536.     BX = new code page (see #0962 at INT 21/AX=6602h)
  2537.     DX = country code???
  2538. Return: AL = status
  2539.          00h successful
  2540.          else DOS error code
  2541. Note:    this function is called by the DOS v3.3+ kernel
  2542. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  2543.  
  2544. Format of DOS 3.30 internal code page structure:
  2545. Offset    Size    Description    (Table 1403)
  2546.  00h  8 BYTEs    ???
  2547.  08h 64 BYTEs    name of country information file
  2548.  48h    WORD    system code page
  2549.  4Ah    WORD    number of supported subfunctions
  2550.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  2551.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  2552.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  2553.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  2554.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  2555. --------D-2F1401-----------------------------
  2556. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  2557.     AX = 1401h
  2558.     DL = function (00h open, 01h close)
  2559.     DH = wait flag
  2560.         00h block until screen opens
  2561.         01h return error if screen is not available
  2562.         02h urgent--always open screen immediately
  2563. Return: CF clear if successful
  2564.         BX = amount of memory needed to save screen and keyboard info,
  2565.         0000h if default save location can be used (only if DH was 02h)
  2566.     CF set on error
  2567. Note:    the application using the screen is frozen until the popup screen is
  2568.       closed
  2569. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  2570. --------U-2F1402-----------------------------
  2571. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  2572.     AX = 1402h
  2573.     BP = subfunction (same as AL for INT 21/AH=65h)
  2574.     BX = code page (see #0962 at INT 21/AX=6602h)
  2575.     DX = country code (see #0625 at INT 21/AH=38h)
  2576.     DS:SI -> internal code page structure (see #1403)
  2577.     ES:DI -> user buffer
  2578.     CX = size of user buffer
  2579. Return: AL = status
  2580.         00h successful
  2581.         else DOS error code
  2582. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  2583.     code page structure apparently only needed for COUNTRY.SYS pathname
  2584. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  2585. --------D-2F1402-----------------------------
  2586. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  2587.     AX = 1402h
  2588.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  2589. Return: CF clear if successful
  2590.     CF set on error
  2591.         AX = error code (see #1404)
  2592. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  2593.  
  2594. (Table 1404)
  2595. Values for POPUP error code:
  2596.  0001h    process does not own screen
  2597.  0004h    unknown error
  2598.  0005h    invalid pointer
  2599. --------U-2F1403-----------------------------
  2600. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  2601.     AX = 1403h
  2602.     DS:SI -> internal code page structure (see #1403)
  2603.     BX = code page (see #0962 at INT 21/AX=6602h)
  2604.     DX = country code (see #0625 at INT 21/AH=38h)
  2605. Return: AL = status
  2606.          ???
  2607. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2608. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  2609. --------D-2F1403-----------------------------
  2610. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  2611.     AX = 1403h
  2612.     ES:DI -> buffer containing saved screen
  2613.         (0000h:0000h for default buffer in POPUP)
  2614. Return: CF clear if successful
  2615.     CF set on error
  2616.         AX = error code (see #1404)
  2617. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  2618. --------U-2F1404-----------------------------
  2619. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  2620.     AX = 1404h
  2621.     BX = code page (see #0962 at INT 21/AX=6602h)
  2622.     DX = country code (see #0625 at INT 21/AH=38h)
  2623.     DS:SI -> internal code page structure (see #1403)
  2624.     ES:DI -> user buffer
  2625. Return: AL = status
  2626.          ???
  2627. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  2628.     code page structure apparently only needed for COUNTRY.SYS pathname
  2629. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  2630. --------U-2F14FE-----------------------------
  2631. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  2632.     AX = 14FEh
  2633.     BX = code page (FFFFh=global code page) (see #0962 at INT 21/AX=6602h)
  2634.     DX = country ID (FFFFh=current country) (see #0625 at INT 21/AH=38h)
  2635.     ES:DI -> country information buffer
  2636.     CL = info ID
  2637.         01h get general internationalization info
  2638.         02h get pointer to uppercase table
  2639.         04h get pointer to filename uppercase table
  2640.         05h get pointer to filename terminator table
  2641.         06h get pointer to collating sequence table
  2642.         07h get pointer to Double-Byte Character Set table
  2643.     CF set (used to return error if not installed)
  2644. Return: CF clear if successful
  2645.         DS:SI -> requested information
  2646.     CF set on error
  2647. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2648.       or FFh on entry.
  2649.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  2650.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  2651. SeeAlso: #1405,AX=14FFh,INT 21/AH=65h
  2652.  
  2653. Format of DR-DOS COUNTRY.SYS file:
  2654. Offset    Size    Description    (Table 1405)
  2655.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  2656.  7Eh    WORD    signature EDC1h
  2657.  80h    var    country pointer records
  2658.     Offset    Size    Description
  2659.      00h    WORD    country code (0000h if end of array)
  2660.      02h    WORD    code page
  2661.      04h    WORD    ??? (0000h)
  2662.      06h  7 WORDs    offsets in file for data tables for subfunctions
  2663.               01h-07h
  2664.  var    var    country information
  2665. --------U-2F14FF-----------------------------
  2666. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  2667.     AX = 14FFh
  2668.     BX = code page
  2669. Return: AX = ???
  2670.     ZF set if AX=0000h
  2671. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  2672.       or FFh on entry.
  2673.     passes codepage preparation request to each character device supporting
  2674.       the generic IOCTL call
  2675. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  2676. --------U-2F1500-----------------------------
  2677. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  2678.     AX = 1500h
  2679. Return: AX = FFFFh
  2680.     ES:DI -> ??? (graphics data?)
  2681. Note:    this installation check conflicts with the CD-ROM Extensions
  2682.       installation check; moved to AX=AC00h in later versions
  2683. SeeAlso: AX=AC00h
  2684. --------d-2F1500BX0000-----------------------
  2685. INT 2F - CD-ROM - INSTALLATION CHECK
  2686.     AX = 1500h
  2687.     BX = 0000h
  2688. Return: BX = number of CD-ROM drive letters used
  2689.     CX = starting drive letter (0=A:)
  2690. Notes:    this installation check DOES NOT follow the format used by other
  2691.       software
  2692.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  2693.       installation check
  2694. SeeAlso: INT 2F/AX=D000h/BX=4D44h"Lotus"
  2695. --------c-2F1500CH90-------------------------
  2696. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  2697.     AX = 1500h
  2698.     CH = 90h (function number)
  2699.     BX = 1234h (magic value for CDBLITZ)
  2700. Return: CX = 1234h if installed
  2701.         CF clear
  2702.         DX = BCD version number (DH = major, DL = minor)
  2703. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  2704. SeeAlso: AX=1500h/CH=99h
  2705. --------c-2F1500CH91-------------------------
  2706. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  2707.     AX = 1500h
  2708.     CH = 91h (function number)
  2709.     BX = 1234h (magic value for CDBLITZ)
  2710. Return: CF clear
  2711.     ES:BX -> statistics record (see #1406)
  2712. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  2713.  
  2714. Format of CDBLITZ statistics record:
  2715. Offset    Size    Description    (Table 1406)
  2716.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  2717.         0001h 'min', 0002h 'max'
  2718.  02h    DWORD    number of read calls???
  2719.  06h    DWORD    total number of sectors read
  2720.  0Ah    DWORD    unused??? (zero)
  2721.  0Eh    DWORD    number of cache hit sectors
  2722.  12h    WORD    cache size in KB
  2723.  14h    WORD    unused??? (zero)
  2724.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  2725. --------c-2F1500CH92-------------------------
  2726. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  2727.     AX = 1500h
  2728.     CH = 92h (function number)
  2729.     BX = 1234h (magic value for CDBLITZ)
  2730. Return: CF clear
  2731. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  2732. --------c-2F1500CH93-------------------------
  2733. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  2734.     AX = 1500h
  2735.     CH = 93h (function number)
  2736.     BX = 1234h (magic value for CDBLITZ)
  2737. Return: CF clear
  2738. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  2739. --------c-2F1500CH94-------------------------
  2740. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  2741.     AX = 1500h
  2742.     CH = 94h (function number)
  2743.     BX = 1234h (magic value for CDBLITZ)
  2744. Return: CF clear
  2745. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  2746. --------c-2F1500CH95-------------------------
  2747. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  2748.     AX = 1500h
  2749.     CH = 95h (function number)
  2750.     BX = 1234h (magic value for CDBLITZ)
  2751. Return: CF clear
  2752. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  2753. --------c-2F1500CH96-------------------------
  2754. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  2755.     AX = 1500h
  2756.     CH = 96h (function number)
  2757.     BX = 1234h (magic value for CDBLITZ)
  2758. Return: CF clear
  2759. Note:    this function resets the counts for number of sectors read and number
  2760.       of cache hits, but no other values in the statistics record
  2761.       (see #1406)
  2762. SeeAlso: AX=1500h/CH=90h
  2763. --------c-2F1500CH97-------------------------
  2764. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  2765.     AX = 1500h
  2766.     CH = 97h (function number)
  2767.     BX = 1234h (magic value for CDBLITZ)
  2768. Return: CF clear
  2769.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  2770.     AH = cache state (00h disabled, 01h enabled)
  2771.     BX = cache size in KB
  2772.     DX:CX = total number of reads
  2773.     DI:SI = number of cache hits
  2774. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  2775. --------c-2F1500CH99-------------------------
  2776. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  2777.     AX = 1500h
  2778.     CH = 99h (function number)
  2779.     BX = 1234h (magic value for CDBLITZ)
  2780. Return: CF clear
  2781.     ???
  2782. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  2783. SeeAlso: AX=1500h/CH=90h
  2784. --------d-2F1501-----------------------------
  2785. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  2786.     AX = 1501h
  2787.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  2788. Return: buffer filled, for each drive letter
  2789.       BYTE    subunit number in driver
  2790.       DWORD address of device driver header
  2791. --------d-2F1502-----------------------------
  2792. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  2793.     AX = 1502h
  2794.     ES:BX -> 38-byte buffer for name of copyright file
  2795.     CX = drive number (0=A:)
  2796. Return: CF set if drive is not a CD-ROM drive
  2797.         AX = 000Fh (invalid drive)
  2798.     CF clear if successful
  2799. SeeAlso: AX=1503h
  2800. --------d-2F1503-----------------------------
  2801. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  2802.     AX = 1503h
  2803.     ES:BX -> 38-byte buffer for name of abstract file
  2804.     CX = drive number (0=A:)
  2805. Return: CF set if drive is not a CD-ROM drive
  2806.         AX = 000Fh (invalid drive)
  2807.     CF clear if successful
  2808. SeeAlso: AX=1502h,AX=1504h
  2809. --------d-2F1504-----------------------------
  2810. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  2811.     AX = 1504h
  2812.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  2813.     CX = drive number (0=A:)
  2814. Return: CF set if drive is not a CD-ROM drive
  2815.         AX = 000Fh (invalid drive)
  2816.     CF clear if successful
  2817. SeeAlso: AX=1502h,AX=1503h
  2818. --------d-2F1505-----------------------------
  2819. INT 2F - CD-ROM - READ VTOC
  2820.     AX = 1505h
  2821.     ES:BX -> 2048-byte buffer
  2822.     CX = drive number (0=A:)
  2823.     DX = sector index (0=first volume descriptor,1=second,...)
  2824. Return: CF set on error
  2825.         AX = error code (15=invalid drive,21=not ready)
  2826.     CF clear if successful
  2827.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  2828. --------d-2F1506-----------------------------
  2829. INT 2F - CD-ROM - TURN DEBUGGING ON
  2830.     AX = 1506h
  2831.     BX = debugging function to enable
  2832. Note:    reserved for development
  2833. SeeAlso: AX=1507h
  2834. --------d-2F1507-----------------------------
  2835. INT 2F - CD-ROM - TURN DEBUGGING OFF
  2836.     AX = 1507h
  2837.     BX = debugging function to disable
  2838. Note:    reserved for development
  2839. SeeAlso: AX=1506h
  2840. --------d-2F1508-----------------------------
  2841. INT 2F - CD-ROM - ABSOLUTE DISK READ
  2842.     AX = 1508h
  2843.     ES:BX -> buffer
  2844.     CX = drive number (0=A:)
  2845.     SI:DI = starting sector number
  2846.     DX = number of sectors to read
  2847. Return: CF set on error
  2848.         AL = error code (15=invalid drive,21=not ready)
  2849.     CF clear if successful
  2850. SeeAlso: AX=1509h
  2851. --------d-2F1509-----------------------------
  2852. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  2853.     AX = 1509h
  2854.     ES:BX -> buffer
  2855.     CX = drive number (0=A:)
  2856.     SI:DI = starting sector number
  2857.     DX = number of sectors to write
  2858. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  2859. SeeAlso: AX=1508h
  2860. --------d-2F150A-----------------------------
  2861. INT 2F - CD-ROM - RESERVED
  2862.     AX = 150Ah
  2863. --------d-2F150B-----------------------------
  2864. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  2865.     AX = 150Bh
  2866.     CX = drive number (0=A:)
  2867. Return: BX = ADADh if MSCDEX.EXE installed
  2868.         AX = support status
  2869.         0000h if drive not supported
  2870.         nonzero if supported
  2871. SeeAlso: AX=150Dh
  2872. --------d-2F150C-----------------------------
  2873. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  2874.     AX = 150Ch
  2875. Return: BH = major version
  2876.     BL = minor version
  2877. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  2878. --------d-2F150D-----------------------------
  2879. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  2880.     AX = 150Dh
  2881.     ES:BX -> buffer for drive letter list (1 byte per drive)
  2882. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  2883.     to the drive in the same position for function 1501h
  2884. SeeAlso: AX=150Bh
  2885. --------d-2F150E-----------------------------
  2886. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  2887.     AX = 150Eh
  2888.     BX = subfunction
  2889.         00h get preference
  2890.         DX = 0000h
  2891.         Return: DX = preference settings
  2892.         01h set preference
  2893.         DH = volume descriptor preference
  2894.             01h = primary volume descriptor
  2895.             02h = supplementary volume descriptor
  2896.         DL = supplementary volume descriptor preference
  2897.             01h = shift-Kanji
  2898.     CX = drive number (0=A:)
  2899. Return: CF set on error
  2900.         AX = error code (15=invalid drive,1=invalid function)
  2901.     CF clear if successful
  2902. --------d-2F150F-----------------------------
  2903. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  2904.     AX = 150Fh
  2905.     CL = drive number (0=A:)
  2906.     CH bit 0 = copy flag
  2907.         clear if direct copy
  2908.         set if copy to structure which removes ISO/High Sierra diffs
  2909.     ES:BX -> ASCIZ path name
  2910.     SI:DI -> buffer for directory entry (see #1407,#1408)
  2911.          minimum 255 bytes for direct copy
  2912. Return: CF set on error
  2913.         AX = error code
  2914.     CF clear if successful
  2915.         AX = disk format (0=High Sierra,1=ISO 9660)
  2916.  
  2917. Format of CD-ROM directory entry (direct copy):
  2918. Offset    Size    Description    (Table 1407)
  2919.  00h    BYTE  length of directory entry
  2920.  01h    BYTE  length of XAR in Logical Block Numbers
  2921.  02h    DWORD LBN of data, Intel (little-endian) format
  2922.  06h    DWORD LBN of data, Motorola (big-endian) format
  2923.  0Ah    DWORD length of file, Intel format
  2924.  0Eh    DWORD length of file, Motorola format
  2925. ---High Sierra---
  2926.  12h  6 BYTEs date and time
  2927.  18h    BYTE  bit flags
  2928.  19h    BYTE  reserved
  2929. ---ISO 9660---
  2930.  12h  7 BYTEs date and time
  2931.  19h    BYTE  bit flags
  2932. ---both formats---
  2933.  1Ah    BYTE  interleave size
  2934.  1Bh    BYTE  interleave skip factor
  2935.  1Ch    WORD  volume set sequence number, Intel format
  2936.  1Eh    WORD  volume set sequence number, Motorola format
  2937.  20h    BYTE  length of file name
  2938.  21h  N BYTEs file name
  2939.     BYTE (optional) padding if filename is odd length
  2940.       N BYTEs system data
  2941. SeeAlso: #1408
  2942.  
  2943. Format of CD-ROM directory entry (canonicalized):
  2944. Offset    Size    Description    (Table 1408)
  2945.  00h    BYTE    length of XAR in Logical Block Numbers
  2946.  01h    DWORD    Logical Block Number of file start
  2947.  05h    WORD    size of disk in logical blocks
  2948.  07h    DWORD    file length in bytes
  2949.  0Bh  7 BYTEs    date and time
  2950.  12h    BYTE    bit flags
  2951.  13h    BYTE    interleave size
  2952.  14h    BYTE    interleave skip factor
  2953.  15h    WORD    volume set sequence number
  2954.  17h    BYTE    length of file name
  2955.  18h 38 BYTEs    ASCIZ filename
  2956.  3Eh    WORD    file version number
  2957.  40h    BYTE    number of bytes of system use data
  2958.  41h 220 BYTEs    system use data
  2959. SeeAlso: #1407
  2960. --------d-2F1510-----------------------------
  2961. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  2962.     AX = 1510h
  2963.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  2964.     ES:BX -> CD-ROM device driver request header (see #1382 at AX=0802h)
  2965. --------W-2F1600-----------------------------
  2966. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  2967.     AX = 1600h
  2968. Return: AL = status
  2969.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  2970.         01h Windows/386 2.x running
  2971.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  2972.           mode nor Windows/386 2.x running) (obsolete--see note)
  2973.         FFh Windows/386 2.x running
  2974.     AL = anything else
  2975.         AL = Windows major version number >= 3
  2976.         AH = Windows minor version number
  2977. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  2978.       drivers, TSRs, and applications) to cooperate with multitasking
  2979.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  2980.     certain calls are also supported in the Microsoft 80286 DOS extender in
  2981.       Windows standard mode
  2982.     this function served as the installation check and AX=1610h served to
  2983.       get the driver entry point for XMS version 1, which is now obsolete.
  2984.       Use AX=4300h and AX=4310h instead
  2985. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  2986. Index:    installation check;XMS version 1
  2987. --------W-2F1602-----------------------------
  2988. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  2989.     AX = 1602h
  2990. Return: ES:DI -> Windows/386 2.x API procedure entry point
  2991. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  2992.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  2993.         AX = 0000h
  2994.         ES:DI -> return address
  2995.         JUMP to address returned from INT 2F/AX=1602h
  2996.     After JUMP, at return address:
  2997.         BX = current VM ID.
  2998. SeeAlso: AX=C020h
  2999. --------W-2F1603-----------------------------
  3000. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3001.     AX = 1603h
  3002. Return: AX = 5248h ('RH') if supported
  3003.         DS:SI -> Windows/386 instance data (see #1409)
  3004. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3005.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3006.       supported, as is the case in DOS versions prior to 5.0
  3007.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3008.       this function, DOSMGR's behavior, and instancing in general
  3009. SeeAlso: AX=1607h/BX=0015h
  3010.  
  3011. Format of Windows/386 instance data:
  3012. Offset    Size    Description    (Table 1409)
  3013.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3014.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3015.         0000h if not applicable
  3016.  04h    WORD    number of instance data entries (max 32)
  3017.  06h    Array of instance data entries
  3018.     Offset    Size    Description
  3019.      00h    WORD    segment (0002h = DOS kernel)
  3020.      02h    WORD    offset
  3021.      04h    WORD    size
  3022. --------W-2F1605-----------------------------
  3023. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  3024.     AX = 1605h
  3025.     ES:BX = 0000h:0000h
  3026.     DS:SI = 0000h:0000h
  3027.     CX = 0000h
  3028.     DX = flags
  3029.         bit 0 = 0 if Windows enhanced-mode initialization
  3030.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  3031.         bits 1-15 reserved (undefined)
  3032.     DI = version number (major in upper byte, minor in lower)
  3033. Return: CX = 0000h if okay for Windows to load
  3034.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  3035.     CX <> 0 if Windows should not load
  3036.     ES:BX -> startup info structure (see #1410)
  3037.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  3038.           (see #1413)
  3039. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  3040.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  3041.       driver or TSR can watch for this broadcast and return the appropriate
  3042.       values.  If the driver or TSR returns CX <> 0, it is also its
  3043.       responsibility to display an error message.
  3044.     each handler must first chain to the prior INT 2F handler with
  3045.       registers unchanged before processing the call
  3046.     if the handler requires local data on a per-VM basis, it must store the
  3047.       returned ES:BX in the "next" field of a startup info structure and
  3048.       return a pointer to that structure in ES:BX
  3049.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  3050.       already nonzero, the TSR must fail the initialization by setting CX
  3051.       nonzero
  3052.     MSD checks for Windows 3.0 running in standard mode by testing whether
  3053.       CX=FFFFh and other registers are unchanged on return
  3054.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  3055.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  3056.     Micrsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  3057.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  3058.       active
  3059. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  3060.  
  3061. Format of Windows Startup Information Structure:
  3062. Offset    Size    Description    (Table 1410)
  3063.  00h  2 BYTEs    major, minor version of info structure
  3064.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  3065.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  3066.  0Ah    DWORD    virtual device reference data (see #1412)
  3067.         (only used if above nonzero)
  3068.  0Eh    DWORD    pointer to instance data records (see #1411) or 0000h:0000h
  3069.  
  3070. Format of one Instance Item in array:
  3071. Offset    Size    Description    (Table 1411)
  3072.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  3073.  04h    WORD    size of instance data
  3074.  
  3075. Format of Virtual Device Reference Data:
  3076. Offset    Size    Description    (Table 1412)
  3077.  00h    DWORD    physical address of ??? or 00000000h
  3078.  04h    DWORD    physical address of ??? table
  3079.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  3080.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  3081.         00000000h = end of table
  3082. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  3083.       chain, the second pointer to a field of 40h bytes followed by a
  3084.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  3085.       the start segment of the UMB area
  3086.  
  3087. (Table 1413)
  3088. Values Windows virtual mode enable/disable procedure is called with:
  3089.     AX = 0000h disable V86 mode
  3090.     AX = 0001h enable V86 mode
  3091.     interrupts disabled
  3092. Return: CF set on error
  3093.     CF clear if successful
  3094.     interrupts disabled
  3095. --------W-2F1606-----------------------------
  3096. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  3097.     AX = 1606h
  3098.     DX = flags
  3099.         bit 0 = 0 if Windows enhanced-mode exit
  3100.         bit 0 = 1 if Microsoft 286 DOS extender exit
  3101.         bits 1-15 reserved (undefined)
  3102. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  3103.       broadcast will be issued immediately.
  3104.     this call will be issued in real mode
  3105.     Novell DOS v7.0 (Update 8 - Update 10) TASKMGR in multitasking mode
  3106.       uses this broadcast, even if TASKMGR.INI sets Win31Present= to OFF
  3107. SeeAlso: AX=1605h,AX=1609h
  3108. --------W-2F1607-----------------------------
  3109. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  3110.     AX = 1607h
  3111.     BX = virtual device ID (see #1419)
  3112.     CX = (usually) callout subfunction
  3113. Return: (usually) AX,BX,CX,DX,ES contain results
  3114. Notes:    more of a convention than an API, this call specifies a standard
  3115.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  3116.       to DOS device drivers and TSRs
  3117.     see below for details on several virtual devices
  3118. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3119. SeeAlso: AX=1607h/BX=0018h,AX=1684h,AX=C020h
  3120. --------W-2F1607BX0006-----------------------
  3121. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  3122.     AX = 1607h
  3123.     BX = 0006h (VxD identifier of "V86MMGR")
  3124.     CX = 0000h
  3125. Return: AX = status
  3126.         0000h if local A20 state changed
  3127.         1607h if A20 unchanged
  3128.         other if global A20 state changed
  3129. --------W-2F1607BX000C-----------------------
  3130. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  3131.     AX = 1607h
  3132.     BX = 000Ch (VxD identifier of "VMD")
  3133. Return: CX = nonzero if mouse driver already virtualized
  3134. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  3135.       nonzero; if yes, it will not automatically virtualize the mouse
  3136.       driver.  This would be used if MOUSE.COM already virtualizes
  3137.       itself using the Windows API.
  3138. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  3139. ----------2F1607BX0010-----------------------
  3140. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  3141.     AX = 1607h
  3142.     BX = 0010h (VxD identifier of "BLOCKDEV")
  3143.     CX = function
  3144.         0001h starting FastDisk compatibility tests
  3145.         0002h ending FastDisk compatibility tests
  3146.         0003h check if FastDisk installation allowed
  3147.         Return: CX = 0000h if allowed
  3148. Note:    this interface is called by the Windows FastDisk driver (such as
  3149.       WDCTRL) when it thinks that the INT 13h handler immediately below
  3150.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  3151.       program which hooks itself underneath IO.SYS's INT 13h code with
  3152.       INT 2F/AH=13h
  3153. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  3154. --------W-2F1607BX0014-----------------------
  3155. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  3156.     AX = 1607h
  3157.     BX = 0014h (VxD identifier of "VNETBIOS")
  3158. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  3159.         command code (see #1414)
  3160. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  3161.       the NetBIOS has an extensions Windows should know about
  3162. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  3163.  
  3164. (Table 1414)
  3165. Values for VNETBIOS action code:
  3166.  00h    "VN_Unknown" unknown command
  3167.  04h    "VN_No_Map"  no memory mapping necessary
  3168.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  3169.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  3170.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  3171.  14h    "VN_Chain_Send"     the chain-send command
  3172.  18h    "VN_Cancel"    special case for cancel command
  3173.  1Ch    "VN_Buffer_In"    buffer is incoming
  3174.  20h    "VN_Buffer_Out" buffer is outgoing
  3175.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  3176. --------D-2F1607BX0015-----------------------
  3177. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  3178.     AX = 1607h
  3179.     BX = 0015h (VxD identifier of "DOSMGR")
  3180.     CX = function
  3181.         0000h query instance processing
  3182.         DX = 0000h
  3183.         Return: CX = state
  3184.                 0000h not instanced
  3185.                 other instanced (DOS 5+ kernel returns 0001h)
  3186.                 DX = segment of DOS drivers or 0000h for
  3187.                     default of 0070h
  3188.                 ES:BX -> patch table (see #1416)
  3189.         0001h set patches in DOS
  3190.         DX = bit mask of patch requests (see #1415)
  3191.         Return: AX = B97Ch
  3192.             BX = bit mask of patches applied (see #1415)
  3193.             DX = A2ABh
  3194.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  3195.         DX = bit mask of patch requests (see function 0001h)
  3196.         Return: CX = 0000h (DOS 5-6)
  3197.         Note:    return values are ignored by DOSMGR in Windows 3.1
  3198.         0003h get size of DOS data structures
  3199.         DX = bit mask of request (only one bit can be set)
  3200.             bit 0: Current Directory Structure size
  3201.         Return: if supported request:
  3202.                 AX = B97Ch
  3203.                 CX = size in bytes of requested structure
  3204.                 DX = A2ABh
  3205.             else:
  3206.                 CX = 0000h
  3207.                 all other registers preserved
  3208.         0004h determine instanced data structures
  3209.         Return: AX = B97Ch if supported
  3210.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  3211.             BX = bit mask of instanced items
  3212.                 bit 0: CDS
  3213.                 bit 1: SFT
  3214.                 bit 2: device list
  3215.                 bit 3: DOS swappable data area
  3216.         0005h get device driver size
  3217.         ES = segment of device driver
  3218.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  3219.             DX:AX = A2ABh:B97Ch if successful
  3220.                 BX:CX = size of device driver in bytes
  3221. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  3222.       been instanced via this API and will not perform its own default
  3223.       instancing of the normal DOS/BIOS data if so; if this API is not
  3224.       supported, DOSMGR will also try to access instancing data through
  3225.       INT 2F/AX=1603h
  3226.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  3227.       tables of instancing information for earlier versions of DOS
  3228.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3229.       DOSMGR's behavior and instancing in general
  3230. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  3231.  
  3232. Bitfields for DOSMGR patch requests:
  3233. Bit(s)    Description    (Table 1415)
  3234.  0    enable critical sections
  3235.  1    NOP setting/checking user ID
  3236.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  3237.  3    trap stack fault in "SYSINIT" to WIN386
  3238.  4    BIOS patch to trap "Insert disk X:" to WIN386
  3239.  
  3240. Format of DOSMGR patch table:
  3241. Offset    Size    Description    (Table 1416)
  3242.  00h  2 BYTEs    DOS version (major, minor)
  3243.  02h    WORD    offset in DOS data segment of "SAVEDS"
  3244.  04h    WORD    offset in DOS data segment of "SAVEBX"
  3245.  06h    WORD    offset in DOS data segment of InDOS flag
  3246.  08h    WORD    offset in DOS data segment of User ID word
  3247.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  3248.           critical section calls (see INT 2A/AH=80h)
  3249.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  3250.           containing segment of last MCB in conventional memory
  3251. --------W-2F1607BX0018-----------------------
  3252. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  3253.     AX = 1607h
  3254.     BX = 0018h (VMPoll VxD ID)
  3255.     CX = 0000h
  3256. Return: AX = status
  3257.         0000h if timeslice used
  3258.         nonzero if timeslice not needed
  3259. Note:    when VMPoll makes this callout, all virtual machines are idle
  3260. SeeAlso: AX=1607h
  3261. --------W-2F1607BX0021--------------------------------------
  3262. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  3263.     AX = 1607h
  3264.     BX = 0021h (PageFile VxD ID)
  3265.     CX = 0000h
  3266. Return: AX = status
  3267.         0000h success
  3268.         ES:DI -> cache lock byte in disk cacher
  3269.         other no disk cache or unsupported
  3270. Notes:    PageFile issues this call on real-mode initialization in order to allow
  3271.       disk caches to provide it with a byte which it can use to temporarily
  3272.       lock the disk cache; VMPOLL also issues this call, so it is made
  3273.       twice each time Windows starts up
  3274.     if this call fails, PageFile falls back to other techniques for locking
  3275.       the disk cache
  3276. SeeAlso: AX=1607h
  3277. --------E-2F1607BX22C0-----------------------
  3278. INT 2F - Rational Systems DOS/4GW - ???
  3279.     AX = 1607h
  3280.     BX = 22C0h
  3281.     ???
  3282. Return: ???
  3283. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  3284. --------W-2F1608-----------------------------
  3285. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  3286.     AX = 1608h
  3287. Notes:    called after all installable devices have been initialized
  3288.     real-mode software may be called between the Windows enhanced-mode init
  3289.       call (AX=1605h) and this call; the software must detect this
  3290.       situation
  3291. SeeAlso: AX=1605h,AX=1609h
  3292. --------W-2F1609-----------------------------
  3293. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  3294.     AX = 1609h
  3295. Note:    called at the beginning of a normal exit sequence; not made in the
  3296.       event of a fatal system crash
  3297. SeeAlso: AX=1606h,AX=1608h
  3298. --------W-2F160A-----------------------------
  3299. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  3300.     AX = 160Ah
  3301. Return: AX = 0000h if call supported
  3302.         BX = version (BH=major, BL=minor)
  3303.         CX = mode (0002h = standard, 0003h = enhanced)
  3304. SeeAlso: AX=1600h,AX=4680h
  3305. --------W-2F160B-----------------------------
  3306. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  3307.     AX = 160Bh
  3308.     ES:DI -> communication structure (see #1417) or 0000h:0000h
  3309. Return: ES:DI -> communication structure
  3310. Desc:    this call allows Windows-aware TSRs to make themselves known to
  3311.       Windows.
  3312. Note:    the TSR should allocate a communication structure, place the given
  3313.       ES:DI pointer in the first field, and return a pointer to the new
  3314.       structure
  3315. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  3316.  
  3317. Format of TSR-to-Windows communication structure:
  3318. Offset    Size    Description    (Table 1417)
  3319.  00h    DWORD    pointer to next structure
  3320.  04h    WORD    PSP segment
  3321.  06h    WORD    API version ID (0100h)
  3322.  08h    WORD    EXEC flags
  3323.         bit 0: "WINEXEC"
  3324.         bit 1: "LOADLIBRARY"
  3325.         bit 2: "OPENDRIVER"
  3326.  0Ah    WORD    "exec_cmd_show"
  3327.  0Ch    DWORD    "exec_cmd"
  3328.  10h  4 BYTEs    reserved (0)
  3329.  14h    DWORD    pointer to TSR ID block (see #1418)
  3330.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  3331.  
  3332. Format of Norton Utilities 6.0 TSR ID block:
  3333. Offset    Size    Description    (Table 1418)
  3334.  00h    WORD    length of name string
  3335.  02h  N BYTEs    name of TSR's executable
  3336. --------W-2F160C-----------------------------
  3337. INT 2F - MS Windows 3.1 - DETECT ROMs
  3338.     AX = 160Ch
  3339.     ???
  3340. Return: ???
  3341. Note:    used by ROM Windows
  3342. SeeAlso: AX=160Bh
  3343. --------m-2F1610-----------------------------
  3344. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  3345.     AX = 1610h
  3346.     details unavailable
  3347. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  3348.       obsolete.  Use AX=4300h and AX=4310h instead
  3349. SeeAlso: AX=1600h,AX=4310h
  3350. --------W-2F1680-----------------------------
  3351. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  3352.     AX = 1680h
  3353. Return: AL = status
  3354.         00h if the call is supported
  3355.         80h (unchanged) if the call is not supported
  3356. Notes:    programs can use this function in idle loops to enhance performance
  3357.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  3358.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  3359.     does not block the program; it just gives up the remainder of the time
  3360.       slice
  3361.     should not be used by Windows-specific programs
  3362.     when called very often without intermediate screen output under WIN 3+,
  3363.       the VM will go into an idle-state and will not receive the next slice
  3364.       before 8 seconds. This time can be changed in SYSTEM.INI through
  3365.       "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  3366. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  3367. --------W-2F1681-----------------------------
  3368. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  3369.     AX = 1681h
  3370. Notes:    used to prevent a task switch from occurring
  3371.     should be followed by an INT 2F/AX=1682h call as soon as possible
  3372.     nested calls are allowed, and must be followed by an appropriate number
  3373.       of "end critical section" calls
  3374.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  3375.       increment by hand.
  3376. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  3377. --------W-2F1682-----------------------------
  3378. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  3379.     AX = 1682h
  3380. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  3381.       and decrement by hand, taking care not to decrement InDOS flag
  3382.       through zero
  3383. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  3384. --------W-2F1683-----------------------------
  3385. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  3386.     AX = 1683h
  3387. Return: BX = current virtual machine (VM) ID
  3388. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  3389.     VM IDs are reused when VMs are destroyed
  3390.     an ID of 0 will never be returned
  3391. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  3392. --------W-2F1684-----------------------------
  3393. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  3394.     AX = 1684h
  3395.     BX = virtual device (VxD) ID (see #1419)
  3396.     ES:DI = 0000h:0000h
  3397. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  3398. Note:    some Windows enhanced-mode virtual devices provide services that
  3399.       applications can access.  For example, the Virtual Display Device
  3400.       (VDD) provides an API used in turn by WINOLDAP.
  3401. SeeAlso: AX=1683h
  3402.  
  3403. (Table 1419)
  3404. Values for MS Windows VxD ID:
  3405. Value    Name   CallOut V86 PM    Description
  3406.  0000h    LPT        N    N  N    DOS386 LPT Device (Windows for Workgroups 3.11)
  3407.  0000h    MSODISUP    N    N  N    MS ODI Support (Windows for Workgroups 3.11)
  3408.  0000h    NWNBLINK    N    N  N    Netware NetBIOS (Windows for Workgroups 3.11)
  3409.  0000h    SERIAL        N    N  N    DOS386 Serial Device (Windows for Workgrp 3.11)
  3410.  0001h    VMM        N  N    Virtual Machine Manager
  3411.  0002h    Debug
  3412.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  3413.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  3414.  0005h    VTD        Y  Y    Virtual Timer Device
  3415.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  3416.  0007h    PageSwap    N  N    Paging Device
  3417.  0008h    Parity        N  N    Parity-check trapper
  3418.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  3419.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  3420.  000Bh    VSD        N  N    Virtual Sound Device
  3421.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  3422.  000Dh    VKD        N  Y    Virtual Keyboard Device
  3423.  000Eh    VCD        N  Y    Virtual COMM Device
  3424.  000Fh    VPD            Virtual Printer Device
  3425.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  3426.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  3427.  0010h    IOS        N    N  N    DOS386 IOS Device (Windows for Workgroups 3.11)
  3428.  0010h    IOS        N  Y    (Chicago)
  3429.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  3430.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  3431.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  3432.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  3433.  0015h    DOSMGR        Y    Y  N    DOS data instancing (see #1422)
  3434.  0016h    WINLOAD
  3435.  0017h    SHELL        N  Y
  3436.  0018h    VMPOLL        N  N
  3437.  0019h    VPROD
  3438.  001Ah    DOSNET        N  N    assures network integrity across VMs
  3439.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  3440.  001Bh    VFD        N  N    Virtual Floppy Device
  3441.  001Ch    VDD2            Secondary display adapter
  3442.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  3443.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  3444.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  3445.  001Dh    WINDEBUG    N  Y
  3446.  001Dh    TDDebug        N  Y
  3447.  001Eh    TSRLoad            TSR instance utility
  3448.  001Fh    BiosHook        BIOS interrupt hooker VxD
  3449.  0020h    Int13        N    N  N
  3450.  0021h    PageFile    N  Y    Paging File device
  3451.  0022h    SCSI
  3452.  0023h    MCA_POS
  3453.  0024h    SCSIFD            SCSI FastDisk device
  3454.  0025h    VPEND            Pen device
  3455.  0026h    APM            Advanced Power Management
  3456.  0027h    VXDLDR         N    Y  Y    VXDLDR (Windows for Workgroups 3.11)
  3457.  0028h    NDIS         N    Y  Y    Network Driver Interface Specification
  3458.                   (Windows for Workgroups 3.11)
  3459.  002Ah    VWIN32        N  Y    (Chicago)
  3460.  002Bh    VCOMM         N    Y  Y    DOS386 VCOMM Device (Windows for Workgrps 3.11)
  3461.  002Dh    W32S         Y    N  Y    WIN32s
  3462.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  3463.  0031h    NETBEUI         N    N  N    NETBEUI (Windows for Workgroups 3.11)
  3464.  0032h    SERVER         N    Y  Y    Int21 File Server (Windows for Workgroups 3.11)
  3465.  0033h    CONFIGMG    Y  Y    (Chicago)
  3466.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  3467.  0034h    DWCFGMG.SYS        Plug-and-Play configuration manager
  3468.  0036h    VFBACKUP    Y  Y    (Chicago)
  3469.  0038h    VCOND        Y  Y    (Chicago)
  3470.  003Ah    VPMTD         N    N  Y    IFAX Scheduler Device (Windows for Workgr 3.11)
  3471.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  3472.  0051h    ISAPNP        N  N
  3473.  008Dh    ESDI_506    N  N    (Chicago)
  3474.  0090h    voltrack    N  N
  3475.  00FDh    FAKEIDE        N  N    (Chicago)
  3476.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  3477.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  3478.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  3479.  0202h    WINICE        Y  Y    SoftICE/W
  3480.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  3481.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  3482.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  3483.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  3484.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  3485.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  3486.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  3487.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  3488.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  3489.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  3490.  0460h    UNIMODEM    N  Y
  3491.  0480h    VNetSup         N    Y  Y    Virtual Net Support (Windows for Workgrps 3.11)
  3492.  0481h    VRedir         N    N  N    Redirector File System Driver
  3493.                   (Windows for Workgroups 3.11)
  3494.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  3495.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  3496.  0484h    IFSMgr         Y    Y  N    Installable File System Manager
  3497.                   (Windows for Workgroups 3.11)
  3498.  0486h    VFAT         N    Y  Y    Win386 HPFS Driver (Windows for Workgrps 3.11)
  3499.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  3500.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  3501.  048Bh    VCache         N    Y  Y    Virtual File Cache (Windows for Workgrps 3.11)
  3502.  048Bh    VCACHE        Y  Y
  3503.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  3504.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  3505.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  3506.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  3507.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  3508.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  3509.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  3510.  22C0h    ???        Y        Rational Systems DOS/4GW ??? 
  3511.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  3512.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  3513.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  3514.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  3515.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  3516.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  3517.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  3518.                   A. Kenemuth of Interabang Computing
  3519.  28A1h    PharLap        Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  3520.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  3521.                   Andrew Schulman in MSJ February 1993
  3522.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  3523.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  3524.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  3525.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  3526.  32CBh    VFRAD        Y  Y    Dr.Franz - Simulatan's diagnotics VFRAD.386
  3527.  4321h    POSTMSG        Y  Y    (see #1436)
  3528.  7A5Fh    SIWVID        Y    Y  Y    Soft-ICE for Windows video driver
  3529.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  3530.  7FE0h    VWFD        N    Y  Y    reports windowed/fullscreen state
  3531.                   by Neil Sandlin of Microsoft
  3532.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  3533.                   by Keith Jin of Microsoft PSS
  3534.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  3535.                   Sandlin of Microsoft
  3536.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  3537.                   Neil Sandlin of Microsoft
  3538.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  3539.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  3540.                   Bernie McIlroy of Microsoft
  3541.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  3542.                   Sandlin of Microsoft
  3543.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  3544.                   Sandlin of Microsoft
  3545.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  3546.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  3547.                   Borland C++ v4.0
  3548. Note:    The high bit of the VxD ID is reserved for future use. The
  3549.     next 10 bits are the OEM number which is assigned by Microsoft. The
  3550.     low 5 bits are the device number.  Naturally, this scheme has not
  3551.     been adhered to since there are now more than 32 different VxDs.
  3552. --------W-2F1684BX0005-----------------------
  3553. INT 2F - MS Windows - VTD - GET DEVICE API ENTRY POINT
  3554.     AX = 1684h
  3555.     BX = 0005h (virtual device ID for VTD device) (see #1419)
  3556.     ES:DI = 0000h:0000h
  3557. Return: ES:DI -> VxD API entry point (see #1420)
  3558.           0000h:0000h if the VxD does not support an API
  3559.  
  3560. (Table 1420)
  3561. Call VTD.386 entry point with:
  3562.     AX = 0000h get VTD version number
  3563.         Return: AH = major version
  3564.             AL = minor version
  3565.     AX = 0100h get current clock tick time
  3566.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  3567.                 started
  3568.     AX = 0101h get current system time in milliseconds
  3569.         Return: EAX = time in milliseconds that Windows has been running
  3570.     AX = 0102h get current virtual machine time
  3571.         Return: EAX = cumulative amount of time the virtual machine has
  3572.             been active, in milliseconds
  3573. Note:    this entry point should only be called directly when TOOLHELP.DLL
  3574.       TimerCount() cannot be called
  3575. --------W-2F1684BX0009-----------------------
  3576. INT 2F - MS Windows - REBOOT - GET DEVICE API ENTRY POINT
  3577.     AX = 1684h
  3578.     BX = 0009h (virtual device ID for REBOOT device) (see #1419)
  3579.     ES:DI = 0000h:0000h
  3580. Return: ES:DI -> VxD API entry point (see #1421)
  3581.           0000h:0000h if the VxD does not support an API
  3582.  
  3583. (Table 1421)
  3584. Call REBOOT protected-mode entry point with:
  3585.     AX = function
  3586.         0100h warm boot
  3587.         Return: never
  3588.         Note:    broadcasts "Reboot_Processor" message, which is caught
  3589.               by the VKD device
  3590.         0201h set KERNEL Ctrl-Alt-Del handler
  3591.         ES:DI -> new Ctrl-Alt-Del handler
  3592.         DS:SI -> KERNEL reboot sanity check byte
  3593.         Return: CF clear
  3594.         Notes:    if an application installs its own handler and then
  3595.               chains to Windows' handler, Windows will no longer
  3596.               be able to detect hung applications, and will always
  3597.               produce an "Application not responding" dialog
  3598.             DS must contain a writable, fixed selector because
  3599.               the provided address is converted to a linear address
  3600.               before being stored
  3601.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  3602.               sets the sanity check byte to zero, schedules a
  3603.               750ms wait, and then tests whether the check byte is
  3604.               still zero; if not, it displays a message that there
  3605.               is no hung application and then exits
  3606.         0202h get KERNEL Ctrl-Alt-Del handler
  3607.         Return: CF clear
  3608.             ES:DI -> current Ctrl-Alt-Del handler
  3609.         Note:    the default handler is located in KERNEL
  3610.         0203h display "Application not responding" dialog box
  3611.         ES:DI -> ASCIZ name of hung application
  3612.         Return: never if user pressed Ctrl-Alt-Del a second time
  3613.             CF clear
  3614.             AX = result
  3615.                 0000h user pressed Esc
  3616.                 0001h user pressed Enter
  3617.         Note:    this function is used by the default Windows
  3618.               Ctrl-Alt-Del handler
  3619.         0204h set/reset protected-mode INT 01 handler
  3620.         CX:EDX -> new protected-mode INT 01 handler
  3621.         CX = 0000h restore protected-mode INT 01 handler
  3622.         Return: CF clear
  3623.         Notes:    if CX is nonzero, the current handler address is saved
  3624.               internally before the new handler is set; this saved
  3625.               address is then used when CX is zero on entry
  3626.             used by Windows' default Ctrl-Alt-Del handler; actual
  3627.               fatal exit to DOS will be done on next INT 01
  3628.         Warning: opened files are not closed and remain open as
  3629.               orphaned files in DOS
  3630. Note:    functions 0201h and 0203h are not useful outside the system VM
  3631. --------W-2F1684BX0015-----------------------
  3632. INT 2F - MS Windows - DOSMGR - GET DEVICE API ENTRY POINT
  3633.     AX = 1684h
  3634.     BX = 0015h (virtual device ID for DOSMGR device) (see #1419)
  3635.     ES:DI = 0000h:0000h
  3636. Return: ES:DI -> VxD API entry point (see #1422)
  3637.           0000h:0000h if the VxD does not support an API
  3638.  
  3639. (Table 1422)
  3640. Call DOSMGR entry point with:
  3641.     AX = 0000h get DOSMGR version
  3642.         Return: CF clear
  3643.             AX = version (AH = major, AL = minor)
  3644.     AX = 0001h set critical focus
  3645.         Return: CF clear
  3646.     AX = 0002h crash current virtual machine
  3647.         Return: never
  3648.         Note:   displays message box stating that "application has been
  3649.               stopped by the DOSMGR device"
  3650.     AX = 0003h enter critical section
  3651.         Note:   this function assumes that the code for INT 2A/AX=8001h
  3652.               and INT 2A/AX=8002h have been modified for Windows
  3653.     AX = 0004h get VM ID byte
  3654.         Return: CF clear if successful
  3655.             ES:DI -> VM ID byte
  3656.             CF set on error
  3657.         Note:   this function fails if the INT 2A modifications have not
  3658.               yet been applied
  3659.     AX = 0005h inform Windows of possible media change
  3660.         BL = drive number (00h=A:)
  3661.         Return: CF clear if successful
  3662.             CF set on error
  3663. --------W-2F1684BX0017-----------------------
  3664. INT 2F U - MS Windows - SHELL - GET DEVICE API ENTRY POINT
  3665.     AX = 1684h
  3666.     BX = 0017h (virtual device ID for SHELL device) (see #1419)
  3667.     ES:DI = 0000h:0000h
  3668. Return: ES:DI -> VxD API entry point (see #1423)
  3669.           0000h:0000h if the VxD does not support an API
  3670. SeeAlso: AX=1684h/BX=0021h
  3671.  
  3672. (Table 1423)
  3673. Call SHELL entry point with:
  3674.     EDX = function number (0000h-0016h, mostly unknown)
  3675.         0000h get version number
  3676.         Return: AX = version number
  3677.             EBX = system VM handle
  3678.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  3679.         Return: CF clear
  3680.             AX bit 0 set if system VM executing exclusively
  3681.             BX = background time slice priority
  3682.             CX = foreground time slice priority
  3683.             SI = minimum time slice in milliseconds
  3684.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  3685.         AX bit 0 set if system VM should execute exclusively (ignored?)
  3686.         BX = background time slice priority (1-10000)
  3687.         CX = foreground time slice priority (1-10000)
  3688.         SI = minimum time slice in milliseconds (1-10000)
  3689.         Return: CF clear if successful
  3690.         0003h "SHELL_Crt_VM" create a virtual machine
  3691.         ES:EDI -> SEB structure (see #1424)
  3692.         Return: CF clear if successful
  3693.                EAX = VM handle
  3694.             CF set on error
  3695.                EDX,EAX = result from GetSetDetailedVMError()
  3696.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  3697.         EBX = VM handle (not system VM)
  3698.         Return: nothing
  3699.         0005h "SHELL_Set_Focus"
  3700.         EBX = VM handle
  3701.         ECX = ???
  3702.         Return: nothing
  3703.         0006h "SHELL_Get_VM_State"
  3704.         EBX = VM handle (not system VM)
  3705.         ES:EDI -> ??? structure
  3706.         Return: CF clear if successful
  3707.         0007h "SHELL_Set_VM_State"
  3708.         EBX = VM handle (not system VM)
  3709.         ES:EDI -> ??? structure
  3710.         0008h "SHELL_Debug_Out"
  3711.         ???
  3712.         Return: ???
  3713.         Note:    dummy function in retail version of MS Windows
  3714.         0009h "SHELL_VMDA_Init"
  3715.         ???
  3716.         Return: ???
  3717.         000Ah "SHELL_VMDA_Exit"
  3718.         ???
  3719.         Return: ???
  3720.         000Bh "SHELL_Get_Message_Txt"
  3721.         ???
  3722.         Return: ???
  3723.         000Ch "SHELL_Event_Complete"
  3724.         ???
  3725.         Return: ???
  3726.         000Dh "SHELL_Get_Contention_Info"
  3727.         ???
  3728.         Return: ???
  3729.         000Eh "SHELL_Get_Clip_Info"
  3730.         ???
  3731.         Return: ???
  3732.         000Fh "SHELL_Set_Paste"
  3733.         ???
  3734.         Return: ???
  3735.         0010h "SHELL_Switcher_Assist"
  3736.         ???
  3737.         Return: ???
  3738.         0011h "SHELL_Get_FileSysChng"
  3739.         ???
  3740.         Return: ???
  3741.         0012h "SHELL_Query_Destroy"
  3742.         ???
  3743.         Return: ???
  3744.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  3745.         ???
  3746.         Return: ???
  3747.         0014h "SHELL_User_Busy_API"
  3748.         ???
  3749.         Return: ???
  3750.         0015h "SHELL_Chng_Hot_Key"
  3751.         ???
  3752.         Return: ???
  3753.         0016h "SHELL_Get_TermInfo"
  3754.         ???
  3755.         Return: ???
  3756. Return: CF set if called from VM other than system VM
  3757.         EAX = FFFFFFFFh
  3758. Note:    except for function 0013h, this API may only be called from the system
  3759.       VM
  3760.  
  3761. Format of Shell Execution Block (SEB):
  3762. Offset    Size    Description    (Table 1424)
  3763.  00h    DWORD    PIF flags (see #1425)
  3764.  04h    DWORD    display flags (see #1426)
  3765.  08h    PWORD    -> pathname of .EXE to run
  3766.  0Eh    PWORD    -> argument list
  3767.  14h    PWORD    -> working drive/directory
  3768.  1Ah    WORD    desired number of V86 pages for virtual machine
  3769.  1Ch    WORD    minimum number of V86 pages for VM
  3770.  1Eh    WORD    foreground priority
  3771.  20h    WORD    background priority
  3772.  22h    WORD    maximum KB of EMS
  3773.  24h    WORD    minimum KB of EMS
  3774.  26h    WORD    maximum KB of XMS
  3775.  28h    WORD    minimum KB of XMS
  3776.  2Ah    WORD    ???
  3777.  2Ch    WORD    ???
  3778.  2Eh 128 BYTEs    title
  3779. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  3780.       followed by a WORD selector
  3781.  
  3782. Bitfields for 386 Enhanced Mode PIF flags:
  3783. Bit(s)    Description    (Table 1425)
  3784.  0    exclusive use of processor when VM is fullscreen
  3785.  1    VM runs in background
  3786.  2    VM runs in window
  3787.  3-4    ???
  3788.  5    Alt-Tab reserved
  3789.  6    Alt-Esc reserved
  3790.  7    Alt-Space reserved
  3791.  8    Alt-Enter reserved
  3792.  9    Alt-PrtSc reserved
  3793.  10    PrtSc reserved
  3794.  11    Ctrl-Esc reserved
  3795.  12    VM will release idle time slice
  3796.  13    VM not allowed to use high mem
  3797.  14    unknown
  3798.  15    VM expanded mem not pageable
  3799.  16    VM extended mem not pageable
  3800.  17    Fast paste from clipboard enabled
  3801.  18    VM app memory not pageable
  3802.  30    Close VM when app exits
  3803.  
  3804. Bitfields for SHELL display options:
  3805. Bit(s)    Description    (Table 1426)
  3806.  0    emulate text mode
  3807.  1    monitor text port
  3808.  2    monitor low graphics port
  3809.  3    monitor high graphics port
  3810.  7    Retain video memory
  3811. --------W-2F1684BX0021-----------------------
  3812. INT 2F U - MS Windows - PAGEFILE - GET DEVICE API ENTRY POINT
  3813.     AX = 1684h
  3814.     BX = 0021h (virtual device ID for PAGEFILE device) (see #1419)
  3815.     ES:DI = 0000h:0000h
  3816. Return: ES:DI -> VxD API entry point (see #1427)
  3817.           0000h:0000h if the VxD does not support an API
  3818. SeeAlso: AX=1684h/BX=0017h
  3819.  
  3820. (Table 1427)
  3821. Call PAGEFILE entry point with:
  3822.     AX = function
  3823.         0000h get version
  3824.         Return: CF clear
  3825.             AX = version (AH = major, AL = minor)
  3826.         0001h get swap file info
  3827.         DS:SI -> 128-byte buffer for swap file full pathname
  3828.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  3829.         Return: CF clear
  3830.             AL = pager type (see #1428)
  3831.             AH = flags
  3832.                 bit 7: swap file corrupted
  3833.             ECX = maximum size of swap file
  3834.             DS:SI buffer filled if paging enabled
  3835.             DS:DI buffer filled if permanent swap file
  3836.         0002h delete permanent swap file on exit
  3837.         Return: CF clear
  3838.         0003h get current temporary swap file size
  3839.         Return: CF clear
  3840.             DX:AX = current swap file size in bytes
  3841.                 0000h:0000h if permanent swap file
  3842. Note:    this API is only available in protected mode, and may only be called
  3843.       from the system VM
  3844.  
  3845. (Table 1428)
  3846. Values for MS Windows PAGEFILE pager type:
  3847.  00h    paging disabled
  3848.  01h    MSDOS
  3849.  02h    BIOS
  3850.  03h    32-bit disk access
  3851. SeeAlso: #1427
  3852. --------W-2F1684BX0034-----------------------
  3853. INT 2F U - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  3854.     AX = 1684h
  3855.     BX = 0034h (ID for Configuration Manager) (see #1419)
  3856.     ES:DI = 0000h:0000h
  3857. Return: ES:DI -> API entry point (see #1429)
  3858.           0000h:0000h if Configuration Manager not loaded
  3859. Index:    installation check;Plug-and-Play Configuration Manager
  3860.  
  3861. (Table 1429)
  3862. Call Configuration Manager entry point with:
  3863.     AX = function
  3864.         0000h "CM_GetVersion" get supported DDI version
  3865.         Return: AH = major version (01h)
  3866.             AL = minor version (00h)
  3867.             BX = number of devices identified by configuration
  3868.         Note:    returns AX = 0000h if no config manager installed
  3869.         0001h "CM_GetConfig" get device configuration
  3870.         BX = device index
  3871.         ES:DI -> buffer for configuration information (see #1430)
  3872.         Return: AX = status
  3873.                 0000h successful
  3874.                 ES:DI buffer filled
  3875.                 other error code (0001h = index out of range)
  3876.         0002h "CM_LockConfig" lock device configuration
  3877.         ES:DI -> configuration information
  3878.         Return: AX = status
  3879.                 0000h successful
  3880.                 ES:DI buffer filled with assigned config
  3881.                 0001h resources conflict
  3882.                 0002h invalid request or configuration info
  3883.         0003h "CM_UnlockConfig" unlock device configuration
  3884.         ES:DI -> configuration information
  3885.         Return: AX = status
  3886.                 0000h successful
  3887.                 ES:DI buffer filled with assigned config
  3888.                 0001h invalid request or configuration info
  3889.  
  3890. Format of Configuration Information Structure:
  3891. Offset    Size    Description    (Table 1430)
  3892.  00h    DWORD    bus ID
  3893.  04h    DWORD    device ID
  3894.  08h    DWORD    serial number
  3895.  0Ch    DWORD    logical ID
  3896.  10h    DWORD    flags
  3897. ---ISA bus---
  3898.  14h    BYTE    Card Select Number
  3899.  15h    BYTE    logical device number
  3900.  16h    WORD    Read Data port
  3901. ------
  3902.  18h    WORD    number of memory windows
  3903.  1Ah  9 DWORDs    physical base addresses of memory windows
  3904.  3Eh  9 DWORDs    length of memory windows
  3905.  62h  9 WORDs    memory window attributes
  3906.  74h    WORD    number of I/O ports
  3907.  76h 20 WORDs    I/O port base addresses
  3908.  B6h 20 WORDs    lengths of I/O port ranges
  3909.  F6h    WORD    number of IRQs
  3910.  F8h  7 BYTEs    IRQ registers
  3911.  FFh  7 BYTEs    IRQ attributes
  3912. 106h    WORD    number of DMA channels
  3913. 108h  7 BYTEs    DMA channels used
  3914. 10Fh  7 WORDs    DMA channel attributes
  3915. 11Dh  3 BYTEs    reserved
  3916. SeeAlso: #1429
  3917. --------W-2F1684BX0444-----------------------
  3918. INT 2F - MS Windows - VADMAD - GET DEVICE API ENTRY POINT
  3919.     AX = 1684h
  3920.     BX = 0444h (virtual device ID for VADMAD device) (see #1419)
  3921.     ES:DI = 0000h:0000h
  3922. Return: ES:DI -> VxD API entry point (see #1431)
  3923.           0000h:0000h if the VxD does not support an API
  3924.  
  3925. (Table 1431)
  3926. Call VADMAD entry point with:
  3927.     DX = operation
  3928.         0000h set VADMAD mode
  3929.         AX = desired mode
  3930.         0001h set VADMAD channel
  3931.         AX = desired channel
  3932. Note:    after setting mode/channel, start the DMA operation with an OUT to
  3933.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  3934. --------W-2F1684BX0750-----------------------
  3935. INT 2F - MS Windows - VSWITCHD - GET DEVICE API ENTRY POINT
  3936.     AX = 1684h
  3937.     BX = 0750h (virtual device ID for VSWITCHD device) (see #1419)
  3938.     ES:DI = 0000h:0000h
  3939. Return: ES:DI -> VxD API entry point (see #1432)
  3940.           0000h:0000h if the VxD does not support an API
  3941.  
  3942. (Table 1432)
  3943. Call VSWITCHD entry point with:
  3944.     AX = function
  3945.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  3946.         Return: nothing
  3947.         0001h get windowed mode
  3948.         Return: CF clear if VM is windowed
  3949.             CF set if VM is full-screen
  3950. --------W-2F1684BX2925-----------------------
  3951. INT 2F - MS Windows - EDOS - GET DEVICE API ENTRY POINT
  3952.     AX = 1684h
  3953.     BX = 2925h (virtual device ID for EDOS device) (see #1419)
  3954.     ES:DI = 0000h:0000h
  3955. Return: ES:DI -> VxD API entry point (see #1433)
  3956.           0000h:0000h if the VxD does not support an API
  3957.  
  3958. (Table 1433)
  3959. Call EDOS entry point with:
  3960.     AX = 0000h get EDOS version number
  3961.         Return: AH = major version
  3962.             AL = minor version
  3963.     AX = 0001h display message
  3964.         CX = 0
  3965.         DX:BX -> ASCIZ Message
  3966.     AX = 0002h get EDOS error coded
  3967.         Return: EAX = time in milliseconds that Windows has been running
  3968.     AX = 0003h execute windows program
  3969.         Return: EAX = cumulative amount of time the virtual machine has
  3970.             been active, in milliseconds
  3971.     AX = 0008h get/set priority
  3972.         BX = 0000h??? foreground
  3973.          0001h background
  3974.         DI = 0000h get
  3975.          0001h set
  3976.         DX = priority setting
  3977.         Return: CX = foreground priority
  3978.             DX = background priority
  3979.             BX:AX = flags
  3980.             00000001h exclusive ON
  3981.             00000010h background ON
  3982.             SI = CPU percentage
  3983. --------W-2F1684BX310E-----------------------
  3984. INT 2F - MS Windows - WPS - GET DEVICE API ENTRY POINT
  3985.     AX = 1684h
  3986.     BX = 310Eh (virtual device ID for WPS device) (see #1419)
  3987.     ES:DI = 0000h:0000h
  3988. Return: ES:DI -> VxD API entry point (see #1434)
  3989.           0000h:0000h if the VxD does not support an API
  3990.  
  3991. (Table 1434)
  3992. Call WPS protected-mode entry point with:
  3993.     DX = function
  3994.         0000h get WPS.386 version
  3995.         Return: CF clear
  3996.             AX = version (AH = major, AL = minor)
  3997.         0001h get number of installed VxDs
  3998.         Return: CF clear
  3999.             AX = number of installed VxDs
  4000.         0002h get VxD characteristics
  4001.         AX = number of VxD
  4002.         ES:BX -> buffer for VxD characteristics structure (see #1435)
  4003.         Return: CF clear
  4004.             ES:BX buffer filled
  4005.  
  4006. Format of WPS.386 VxD characteristics structure:
  4007. Offset    Size    Description    (Table 1435)
  4008.  00h    WORD    VxD ID number
  4009.  02h    BYTE    VxD minor version
  4010.  03h    BYTE    VxD major version
  4011.  04h    BYTE    DDK minor version
  4012.  05h    BYTE    DDK major version
  4013.  06h    WORD    flags
  4014.         bit 0: V86 API supported
  4015.         bit 1: PM API supported
  4016.         bit 2: services supported
  4017.  08h    DWORD    start order
  4018.  0Ch  9 BYTEs    ASCIZ VxD name
  4019. --------W-2F1684BX8888-----------------------
  4020. INT 2F - MS Windows - POSTMSG - GET DEVICE API ENTRY POINT
  4021.     AX = 1684h
  4022.     BX = 8888h (virtual device ID for POSTMSG device) (see #1419)
  4023.     ES:DI = 0000h:0000h
  4024. Return: ES:DI -> VxD API entry point (see #1436,#1438)
  4025.           0000h:0000h if the VxD does not support an API
  4026.  
  4027. (Table 1436)
  4028. Call POSTMSG protected-mode entry point with:
  4029.     AX = window handle
  4030.     CX:BX -> callback procedure (see #1437)
  4031. Return: nothing
  4032. Note:    this call registers a WinApp with the VxD; the callback must be in a
  4033.       fixed, non-discardable code segment
  4034. SeeAlso: #1438
  4035.  
  4036. (Table 1437)
  4037. Values POSTMSG callback routine is called with:
  4038.     STACK:    DWORD    "lParam" parameter from DOSApp
  4039.         WORD    "wParam" parameter from DOSApp
  4040.         WORD    Windows message number (WM_USER + 100)
  4041.         DWORD    registered hwnd
  4042.  
  4043. (Table 1438)
  4044. Call POSTMSG V86-mode entry point with:
  4045.     BX = wParam value to pass to protected-mode callback
  4046.     DX:AX = lParam value to pass to protected-mode callback
  4047. Return: CF clear if successful
  4048.     CF set on error (no WinApp registered)
  4049. SeeAlso: #1436
  4050. --------W-2F1684BX8888-----------------------
  4051. INT 2F - MS Windows - VbillD - GET DEVICE API ENTRY POINT
  4052.     AX = 1684h
  4053.     BX = 8888h (virtual device ID for VbillD device) (see #1419)
  4054.     ES:DI = 0000h:0000h
  4055. Return: ES:DI -> VxD API entry point (see #1439)
  4056.           0000h:0000h if the VxD does not support an API
  4057.  
  4058. (Table 1439)
  4059. Call VbillD entry point with:
  4060.     AX = function
  4061.         0001h set reverse video
  4062.         0002h set normal video
  4063. Return: ???
  4064. --------W-2F1685-----------------------------
  4065. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  4066.     AX = 1685h
  4067.     BX = VM ID of virtual machine to switch to
  4068.     CX = flags (see #1440)
  4069.     DX:SI = priority boost (see VMM.INC)
  4070.     ES:DI -> FAR procedure to callback
  4071. Return: CF set on error
  4072.         AX = error code
  4073.         01h invalid VM ID
  4074.         02h invalid priority boost
  4075.         03h invalid flags
  4076.     CF clear if successful
  4077.         event will be or has been called
  4078. Notes:    some DOS devices, such as networks, need to call functions in a
  4079.       specific VM. This call forces the appropriate VM to be installed.
  4080.     the callback procedure must preserve all registers and return with IRET
  4081. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  4082.  
  4083. Bitfields for VM switching flags:
  4084. Bit(s)    Description    (Table 1440)
  4085.  0    wait until interrupts enabled
  4086.  1    wait until critical section unowned
  4087.  2-15    reserved (zero)
  4088. --------E-2F1686-----------------------------
  4089. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4090.     AX = 1686h
  4091. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4092.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4093. SeeAlso: AX=1687h
  4094. --------E-2F1687-----------------------------
  4095. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4096.     AX = 1687h
  4097. Return: AX = 0000h if installed
  4098.         BX = flags
  4099.         bit 0: 32-bit programs supported
  4100.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4101.         DH = DPMI major version
  4102.         DL = two-digit DPMI minor version (binary)
  4103.         SI = number of paragraphs of DOS extender private data
  4104.         ES:DI -> DPMI mode-switch entry point (see #1441)
  4105.     AX nonzero if not installed
  4106. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  4107. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  4108.  
  4109. (Table 1441)
  4110. Call DPMI mode switch entry point with:
  4111.     AX = flags
  4112.         bit 0: set if 32-bit program
  4113.     ES = real mode segment of buffer for DPMI private data (ignored if
  4114.         SI was zero)
  4115. Return: CF set on error
  4116.         program still in real mode
  4117.         AX = error code (DPMI 1.0+)
  4118.            8011h unable to allocate all necessary descriptors
  4119.            8021h 32-bit program specified, but 16-bit DPMI host
  4120.     CF clear if successful
  4121.         CS = 16-bit selector corresponding to real-mode CS
  4122.         SS = selector corresponding to real-mode SS (64K limit)
  4123.         DS = selector corresponding to real-mode DS (64K limit)
  4124.         ES = selector to program's PSP (100h byte limit)
  4125.         FS = GS = 0
  4126.         high word of ESP = 0 if 32-bit program
  4127.         program now in protected mode
  4128. Note:    this entry point is only called for the initial switch to protected
  4129.       mode
  4130. --------W-2F1688BX0BAD-----------------------
  4131. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  4132.     AX = 1688h
  4133.     BX = 0BADh
  4134. Return: AX = 0000h if supported
  4135.         BX = alias selector for LDT
  4136. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  4137.     this call should be considered obsolete for Windows 3.1+, as the
  4138.       alias selector can be retrieved via the API entry point for
  4139.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #1443)
  4140. --------W-2F1689-----------------------------
  4141. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  4142.     AX = 1689h
  4143.     ???
  4144. Return: ???
  4145. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  4146. --------E-2F168A-----------------------------
  4147. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4148.     AX = 168Ah
  4149.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #1442)
  4150. Return: AL = status
  4151.         00h successful
  4152.            ES:(E)DI -> extended API entry point
  4153.         8Ah unsuccessful
  4154. Notes:    the vendor name is used to determine which entry point to return; it is
  4155.       case-sensitive
  4156.     available in protected mode only
  4157.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4158.     this call is present but not documented for DPMI 0.9
  4159.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  4160.       other than the MS-DOS one gracefully, producing an unhandled
  4161.       exception report; this has been fixed in the Borland Pascal 7 version
  4162. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  4163.  
  4164. (Table 1442)
  4165. Values for DPMI vendor-specific API names:
  4166.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #1443)
  4167.  "386MAX"    386MAX v6.00+
  4168.  "HELIX_DPMI"    Helix Netroom's DPMI server
  4169.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #1444)
  4170.  
  4171. (Table 1443)
  4172. Call Windows-support ("MS-DOS") entry point with:
  4173.     AX = 0100h get LDT alias selector
  4174. Return: CF clear if successful
  4175.         AX = alias selector
  4176.     CF set on error
  4177.  
  4178. (Table 1444)
  4179. Call Phar Lap RUN286 entry point with:
  4180.     AX = 0000h (function "load MSW")
  4181.     BX = new value for MSW register (low word of CR0)
  4182. Return: ???
  4183. --------W-2F168B-----------------------------
  4184. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  4185.     AX = 168Bh
  4186.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  4187. Return: AL = 00h if focus set to specified VM
  4188. Notes:    documented on the Microsoft Developer's Network CD-ROM
  4189.     if the VM is a windowed DOS box, it will be set to full screen
  4190. SeeAlso: AX=1683h
  4191. --------W-2F168C-----------------------------
  4192. INT 2F - MS Windows 3.1 - RESTART COMMAND
  4193.     AX = 168Ch
  4194.     ???
  4195. Return: ???
  4196. Note:    WIN.COM executes specified application
  4197. --------W-2F1700-----------------------------
  4198. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4199.     AX = 1700h
  4200. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4201.     AX <> 1700h
  4202.         AL = WINOLDAP major version
  4203.         AH = WINOLDAP minor version
  4204. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4205.       "old" (character-mode) application access to Dynamic Data Exchange,
  4206.       menus, and the Windows clipboard.
  4207. Note:    this installation check DOES NOT follow the format used by other
  4208.       software of returning AL=FFh
  4209. SeeAlso: AX=1701h,AX=4601h
  4210. Index:    installation check;WINOLDAP
  4211. --------W-2F1701-----------------------------
  4212. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  4213.     AX = 1701h
  4214. Return: AX = status
  4215.         nonzero success
  4216.         0000h   clipboard is already open
  4217. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h
  4218. --------W-2F1702-----------------------------
  4219. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  4220.     AX = 1702h
  4221. Return: AX = status
  4222.         nonzero clipboard has been emptied
  4223.         0000h   failure
  4224. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h
  4225. --------W-2F1703-----------------------------
  4226. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  4227.     AX = 1703h
  4228.     DX = clipboard format supported by WinOldAp (see #1445)
  4229.     ES:BX -> data (see #1446,#1447)
  4230.     SI:CX = size of data
  4231. Return: AX = status
  4232.         nonzero data copied into the Clipboard
  4233.         0000h   failure
  4234.  
  4235. (Table 1445)
  4236. Values for WinOldAp clipboard format:
  4237.  01h    text
  4238.  02h    bitmap
  4239.  03h    metafile picture
  4240.  04h    SYLK
  4241.  05h    DIF
  4242.  06h    TIFF
  4243.  07h    OEM text
  4244.  08h    DIB bitmap
  4245.  80h    special format (used by Windows WRITE, maybe other Windows applets???)
  4246.  81h    DSP text
  4247.  82h    DSP bitmap
  4248.  
  4249. Format of Windows Clipboard bitmap:
  4250. Offset    Size    Description    (Table 1446)
  4251.  00h    WORD    type (0000h)
  4252.  02h    WORD    width of bitmap in pixels
  4253.  04h    WORD    height of bitmap in pixels
  4254.  06h    WORD    bytes per line
  4255.  08h    BYTE    number of color planes
  4256.  09h    BYTE    number of adjacent color bits in pixel
  4257.  0Ah    DWORD    pointer to start of data
  4258.  0Eh    WORD    width in 0.1mm units
  4259.  10h    WORD    height in 0.1mm units
  4260.  12h  N BYTEs    bitmap data
  4261.  
  4262. Format of Windows metafile picture:
  4263. Offset    Size    Description    (Table 1447)
  4264.  00h    WORD    mapping mode
  4265.  02h    WORD    X extent
  4266.  04h    WORD    Y extent
  4267.  06h    WORD    picture data
  4268. --------W-2F1704-----------------------------
  4269. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4270.     AX = 1704h
  4271.     DX = clipboard format supported by WinOldAp (see #1445)
  4272. Return:    DX:AX = size of data in bytes, including any headers
  4273.         0000h:0000h if no data in this format in the Clipboard
  4274. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  4275.       bytes
  4276. --------W-2F1705-----------------------------
  4277. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4278.     AX = 1705h
  4279.     DX = clipboard format supported by WinOldAp (see #1445)
  4280.     ES:BX -> buffer
  4281. Return: AX = status
  4282.         nonzero success
  4283.         0000h   error, or no data in this format in Clipboard
  4284. --------W-2F1708-----------------------------
  4285. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4286.     AX = 1708h
  4287. Return: AX = status
  4288.         0000h failure
  4289.         nonzero success
  4290. --------W-2F1709-----------------------------
  4291. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4292.     AX = 1709h
  4293.     SI:CX = desired size in bytes
  4294. Return: DX:AX = number of bytes in largest block of free memory
  4295. Note:    WinOldAp is responsible for including the size of any headers
  4296. --------W-2F170A-----------------------------
  4297. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4298.     AX = 170Ah
  4299.     DX = GDI information index (see #1448)
  4300. Return: AX = integer value of the desired item
  4301.           (see #1449,#1450,#1451,#1452,#1453,#1454,#1455)
  4302. Note:    This function returns the device-capability bits for the given display
  4303.  
  4304. (Table 1448)
  4305. Values for GDI information index:
  4306.  00h    device driver version
  4307.  02h    device classification
  4308.  04h    width in mm
  4309.  06h    height in mm
  4310.  08h    width in pixels
  4311.  0Ah    height in pixels
  4312.  0Ch    bits per pixel
  4313.  0Eh    number of bit planes
  4314.  10h    number of brushes supported by device
  4315.  12h    number of pens supported by device
  4316.  14h    number of markers supported by device
  4317.  16h    number of fonts supported by device
  4318.  18h    number of colors
  4319.  1Ah    size required for device descriptor
  4320.  1Ch    curve capabilities
  4321.  1Eh    line capabilities
  4322.  20h    polygon capabilities
  4323.  22h    text capabilities
  4324.  24h    clipping capabilities
  4325.  26h    bitblt capabilities
  4326.  28h    X aspect
  4327.  2Ah    Y aspect
  4328.  2Ch    length of hypotenuse of aspect
  4329.  58h    logical pixels per inch of width
  4330.  5Ah    logical pixels per inch of height
  4331. SeeAlso: #1449,#1450,#1451,#1452,#1453,#1454,#1455
  4332.  
  4333. (Table 1449)
  4334. Values for device classification:
  4335.  00h    vector plotter
  4336.  01h    raster display
  4337.  02h    raster printer
  4338.  03h    raster camera
  4339.  04h    character-stream, PLP
  4340.  05h    Metafile, VDM
  4341.  06h    display-file
  4342. SeeAlso: #1448,#1450,#1451,#1452,#1453,#1454,#1455
  4343.  
  4344. Bitfields for curve capabilities:
  4345. Bit(s)    Description    (Table 1450)
  4346.  0    circles
  4347.  1    pie wedges
  4348.  2    chord arcs
  4349.  3    ellipses
  4350.  4    wide lines
  4351.  5    styled lines
  4352.  6    wide styled lines
  4353.  7    interiors
  4354. SeeAlso: #1448,#1449,#1451,#1452,#1453,#1454,#1455
  4355.  
  4356. Bitfields for line capabilities:
  4357. Bit(s)    Description    (Table 1451)
  4358.  1    polylines
  4359.  2    markers
  4360.  3    polymarkers
  4361.  4    wide lines
  4362.  5    styled lines
  4363.  6    wide styled lines
  4364.  7    interiors
  4365. SeeAlso: #1448,#1449,#1450,#1452,#1453,#1454,#1455
  4366.  
  4367. Bitfields for polygon capabilities:
  4368. Bit(s)    Description    (Table 1452)
  4369.  0    polygons
  4370.  1    rectangles
  4371.  2    trapezoids
  4372.  3    scanlines
  4373.  4    wide borders
  4374.  5    styled borders
  4375.  6    wide styled borders
  4376.  7    interiors
  4377. SeeAlso: #1448,#1449,#1450,#1451,#1453,#1454,#1455
  4378.  
  4379. Bitfields for text capabilities:
  4380. Bit(s)    Description    (Table 1453)
  4381.  0    output precision character
  4382.  1    output precision stroke
  4383.  2    clippping precision stroke
  4384.  3    90-degree character rotation
  4385.  4    arbitrary character rotation
  4386.  5    independent X and Y scaling
  4387.  6    double-size
  4388.  7    integer scaling
  4389.  8    continuous scaling
  4390.  9    bold
  4391.  10    italic
  4392.  11    underline
  4393.  12    strikeout
  4394.  13    raster fonts
  4395.  14    vector fonts
  4396.  15    reserved
  4397. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1454,#1455
  4398.  
  4399. (Table 1454)
  4400. Values for clipping capabilities:
  4401.  00h    none
  4402.  01h    clipping to rectangles
  4403. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1455
  4404.  
  4405. Bitfields for raster capabilities:
  4406. Bit(s)    Description    (Table 1455)
  4407.  0    simple bitBLT
  4408.  1    device requires banding support
  4409.  2    device requires scaling support
  4410.  3    supports >64K bitmap
  4411. SeeAlso: #1448,#1449,#1450,#1451,#1452,#1453,#1454
  4412. ----------2F18-------------------------------
  4413. INT 2F U - MS-Manager
  4414.     AH = 18h
  4415.     ???
  4416. Return: ???
  4417. --------l-2F1900-----------------------------
  4418. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4419.     AX = 1900h
  4420. Return: AL = status
  4421.         00h not installed
  4422.         FFh installed
  4423. --------l-2F1901-----------------------------
  4424. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4425.     AX = 1901h
  4426.     BL = SHELLC type
  4427.         00h transient
  4428.         01h resident
  4429.     DS:DX -> far call entry point for resident SHELLC.EXE
  4430. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4431. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4432. --------l-2F1902-----------------------------
  4433. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4434.     AX = 1902h
  4435.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4436.           final filename element uppercased
  4437.     DS:DX -> buffer for results
  4438. Return: AL = 00h  failed, either
  4439.         (a) final filename element quoted at ES:DI does not match
  4440.               identity of shell batch file quoted as parameter of most
  4441.               recent call of SHELLB command, or
  4442.         (b) no more Program Start Commands available.
  4443.     AL= FFh     success, then:
  4444.         memory at DS:[DX+1] onwards filled as:
  4445.         DX+1:    BYTE    count of bytes of PSC
  4446.         DX+2: N BYTEs    Program Start Command text
  4447.             BYTE    0Dh terminator
  4448. Desc:    COMMAND.COM executes the result of this call in preference to
  4449.       reading a command from a batch file.    Thus the batch file does not
  4450.       advance in execution for so long as SHELLB provides PSCs from its
  4451.       workspace.
  4452. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  4453.       menu interface.  The final PSC of a sequence is finished with a
  4454.       GOTO COMMON, which causes a loop back in the batch file which called
  4455.       SHELLC so as to execute SHELLC again.     The check on batch file name
  4456.       permits PSCs to CALL nested batch files while PSCs are still stacked
  4457.       up for subsequent execution.
  4458. --------l-2F1903-----------------------------
  4459. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4460.     AX = 1903h
  4461.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4462. Return: AL = status
  4463.         FFh quoted batch file name matches last SHELLB parameter
  4464.         00h it does not
  4465. --------l-2F1904-----------------------------
  4466. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4467.     AX = 1904h
  4468. Return: ES:DI -> name of current shell batch file:
  4469.         WORD    number of bytes of name following
  4470.         BYTEs    (8 max) uppercase name of shell batch file
  4471. --------V-2F1A00-----------------------------
  4472. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4473.     AX = 1A00h
  4474. Return: AL = FFh if installed
  4475. Notes:    AVATAR.SYS also responds to this call
  4476.     documented for DOS 5+, but undocumented for DOS 4.x
  4477. --------V-2F1A00BX414E-----------------------
  4478. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  4479.     AX = 1A00h
  4480.     BX = 414Eh ('AN')
  4481.     CX = 5349h ('SI')
  4482.     DX = 2B2Bh ('++')
  4483. Return: AL = FFh if installed
  4484.         CF clear
  4485.         ES:BX -> INT 29 entry point
  4486.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  4487.         DL = capabilities (v4.00+)
  4488.         00h full capability driver
  4489.         01h reduced capability driver
  4490.         2Bh full capability driver (before v4.00)
  4491. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4492.       replaces the normal ANSI.SYS is a more powerful version with many
  4493.       additional features
  4494. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4495.       from the magic values above
  4496.     an additional installation check is to test for the signature
  4497.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  4498.       number is also available as a four-character ASCII string (e.g.
  4499.       "4.00") four bytes before the entry point
  4500. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  4501. --------V-2F1A00BX4156-----------------------
  4502. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4503.     AX = 1A00h
  4504.     BX = 4156h ('AV')
  4505.     CX = 4154h ('AT')
  4506.     DX = 4152h ('AR')
  4507. Return: AL = FFh if installed
  4508.         CF clear
  4509.         BX = AVATAR protocol level supported
  4510.         CX = driver type
  4511.         0000h AVATAR.SYS
  4512.         4456h DVAVATAR.COM inside DESQview window
  4513.         DX = 0016h
  4514. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4515.       interprets AVATAR command codes in the same way that ANSI interprets
  4516.       ANSI command codes
  4517. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4518.       the magic values
  4519. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  4520. --------V-2F1A01-----------------------------
  4521. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4522.     AX = 1A01h
  4523.     CL = function
  4524.         7Fh for GET
  4525.         5Fh for SET
  4526.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4527. Return:    CF clear if successful
  4528.         AX destroyed
  4529.     CF set on error
  4530.         AX = error code (many non-standard)
  4531. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4532. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4533. --------V-2F1A02-----------------------------
  4534. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4535.     AX = 1A02h
  4536.     DS:DX -> parameter block (see #1456)
  4537. Return: CF clear if successful
  4538.     CF set on error
  4539.         AX = error code
  4540. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4541. SeeAlso: AX=1A01h
  4542.  
  4543. Format of ANSI.SYS parameter block:
  4544. Offset    Size    Description    (Table 1456)
  4545.  00h    BYTE    subfunction
  4546.         00h set/reset interlock
  4547.         01h get /L flag
  4548.  01h    BYTE    interlock state
  4549.         00h=reset, 01h=set
  4550.           This interlock prevents some of the ANSI.SYS post-processing
  4551.           in its hook onto INT 10, AH=00h mode set
  4552.  02h    BYTE    (returned)
  4553.         00h if /L not in effect
  4554.         01h if /L in effect
  4555. --------V-2F1A21-----------------------------
  4556. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4557.     AX = 1A21h (AL='!')
  4558.     DS:SI -> command string with one or more state characters (see #1457)
  4559.     CX = length of command string
  4560. Return: CF set on error (invalid subfunction)
  4561.     CF clear if successful
  4562. Note:    the characters in the state string are interpreted left to right, and
  4563.       need not be in any particular order
  4564. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  4565.  
  4566. (Table 1457)
  4567. Values for AVATAR.SYS state characters:
  4568.  'a'    activate driver
  4569.  'd'    disable driver
  4570.  'f'    use fast screen output
  4571.  'g'    always convert gray keys (+ and -) to function keys
  4572.  'G'    never convert gray keys
  4573.  'l'    convert gray keys only when ScrollLock active
  4574.  's'    use slow screen output
  4575.  't'    Tandy 1000 keyboard (not yet implemented)
  4576. --------V-2F1A3C-----------------------------
  4577. INT 2F U - AVATAR.SYS v0.11 - ???
  4578.     AX = 1A3Ch
  4579.     ???
  4580. Return: CX = 0000h
  4581. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  4582. --------V-2F1A3E-----------------------------
  4583. INT 2F U - AVATAR.SYS v0.11 - ???
  4584.     AX = 1A3Eh
  4585.     CL = ???
  4586.     CH = ???
  4587.     DL = ???
  4588.     DH = ???
  4589. Return: CL = ???
  4590.     CH = ???
  4591.     DL = ???
  4592.     DH = ???
  4593. SeeAlso: AX=1A3Ch,AX=1A3Fh
  4594. --------V-2F1A3F-----------------------------
  4595. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4596.     AX = 1A3Fh (AL='?')
  4597.     ES:DI -> buffer
  4598.     CX = length of buffer in bytes
  4599. Return: CF clear
  4600.     CX = actual size of returned info
  4601. Note:    the returned information consists of multiple letters whose meanings
  4602.       are described under AX=1A21h
  4603. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  4604. --------S-2F1A42BX4156-----------------------
  4605. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4606.     AX = 1A42h
  4607.     BX = 4156h ('AV')
  4608.     ES:DI -> FAR handler for serial port using IRQ3
  4609.     DS = data segment needed by handler
  4610. Return: AX = status/return value
  4611.         0000h if no more room
  4612.         1A42h if ASD not installed
  4613.         else handle to use when uninstalling
  4614. Notes:    the handler need not save/restore registers or signal EOI to the
  4615.       interrupt controller
  4616.     the handler should return AX=0000h if the interrupt was meant for it,
  4617.       and either leave AX unchanged or return a non-zero value otherwise
  4618.     the most recently installed handler will be called first, continuing
  4619.       to earlier handlers until one returns AX=0000h
  4620. SeeAlso: AX=1A43h,AX=1A62h
  4621. --------S-2F1A43BX4156-----------------------
  4622. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4623.     AX = 1A43h
  4624.     BX = 4156h ('AV')
  4625.     ES:DI -> FAR handler for serial port using IRQ4
  4626.     DS = data segment needed by handler
  4627. Return: AX = status/return value
  4628.         0000h if no more room
  4629.         1A43h if ASD not installed
  4630.         else handle to use when uninstalling
  4631. Notes:    (see AX=1A42h)
  4632. SeeAlso: AX=1A42h,AX=1A63h
  4633. --------V-2F1A44BX4156-----------------------
  4634. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4635.     AX = 1A44h
  4636.     BX = 4156h ('AV')
  4637. Return: AX = 0000h
  4638.     DS = data segment
  4639.     CX = size of data segment
  4640. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4641.       process under a multitasker hooks this function and provides a
  4642.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4643. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  4644. --------V-2F1A52-----------------------------
  4645. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4646.     AX = 1A52h
  4647.     CX = size of buffer
  4648.     ES:DI -> buffer
  4649. Return: ??? copied into user buffer
  4650. Note:    the maximum size of the data which may be copied is returned by
  4651.       AX=1A72h
  4652. SeeAlso: AX=1A53h,AX=1A72h
  4653. --------V-2F1A53-----------------------------
  4654. INT 2F U - AVATAR.SYS v0.11 - ???
  4655.     AX = 1A53h
  4656.     CL = ??? (00h-05h)
  4657.     ???
  4658. Return: ???
  4659. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  4660. --------S-2F1A62BX4156-----------------------
  4661. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4662.     AX = 1A62h
  4663.     BX = 4156h ('AV')
  4664.     CX = handle for IRQ routine returned by AX=1A42h
  4665. SeeAlso: AX=1A42h,AX=1A63h
  4666. --------S-2F1A63BX4156-----------------------
  4667. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4668.     AX = 1A63h
  4669.     BX = 4156h ('AV')
  4670.     CX = handle for IRQ routine returned by AX=1A43h
  4671. SeeAlso: AX=1A43h,AX=1A62h
  4672. --------V-2F1A72-----------------------------
  4673. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4674.     AX = 1A72h
  4675. Return: CX = maximum size of ???
  4676. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  4677. --------V-2F1A7B-----------------------------
  4678. INT 2F U - AVATAR.SYS v0.11 - ???
  4679.     AX = 1A7Bh
  4680. Return: AX = 0000h
  4681.     CX = 0000h
  4682. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  4683. --------V-2F1A7D-----------------------------
  4684. INT 2F U - AVATAR.SYS v0.11 - ???
  4685.     AX = 1A7Dh
  4686. Return: AX = ???
  4687. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  4688. --------V-2F1AA5-----------------------------
  4689. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  4690.     AX = 1AA5h
  4691.     DH = subfunction
  4692.         00h get clipboard information
  4693.         01h get clipboard text
  4694.         02h set clipboard text
  4695.         03h append text to clipboard
  4696.         04h clear clipboard
  4697.         05h paste clipboard to keyboard
  4698.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  4699.     CX = size of data area (maximum size for subfunction 01h, actual size
  4700.         to add to clipboard for subfunctions 02h and 03h)
  4701. Return: AL = status
  4702.         00h successful
  4703.         01h unsupported subfunction (reduced capability driver)
  4704.         02h insufficient space
  4705.         A5h unsupported function (ANSIPLUS before v4.00)
  4706.     ES:BX -> ANSIPLUS local clipboard data
  4707.     CX = number of bytes currently in local clipboard
  4708.     DX = maximum size of local clipboard
  4709. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA6h
  4710. --------V-2F1AA6-----------------------------
  4711. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  4712.     AX = 1AA6h
  4713.     BH = function
  4714.         00h get hooked interrupts
  4715.         01h set hooked interrupts mask
  4716.         BL = new interrupts mask (see #1458)
  4717. Return: BL = previous interrupts mask (see #1458)
  4718. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  4719.  
  4720. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  4721.       copy is installed, such as in a multitasking system like DESQview
  4722. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  4723.       chain responds to this call
  4724.  
  4725. Bitfields for ANSIPLUS hooked interrupts mask:
  4726. Bit(s)    Description    (Table 1458)
  4727.  0    INT 09 hook disabled
  4728.  1    INT 10 hook disabled
  4729.  2    INT 15 hook disabled
  4730.  3    INT 16 hook disabled
  4731.  4    INT 1C hook disabled
  4732.  5    reset all bits when INT 29 called
  4733.  6    INT 29 hook disabled
  4734.  7    INT 33, INT 74, or other mouse event hook disabled
  4735. --------V-2F1AA7-----------------------------
  4736. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  4737.     AX = 1AA7h
  4738.     BL = function
  4739.         00h prevent scroll-back saves
  4740.         01h enable scroll-back saves
  4741.         02h disable key reprogramming and lock changes by escape sequences
  4742.         03h enable key reprogramming by escape sequences
  4743.         04h    disable and lock key stacking changes by escape sequences
  4744.         05h allow key stacking by escape sequences
  4745. Return: nothing
  4746. SeeAlso: AX=1AA6h
  4747. --------V-2F1AA8-----------------------------
  4748. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  4749.     AX = 1AA8h
  4750. Return: AL = status
  4751.         00h successful
  4752.         ES:BX -> screen line (character and attribute pairs)
  4753.         CX = length of line in bytes, 0000h if no more lines or
  4754.               unsupported video mode
  4755.         01h unsupported video mode active
  4756.         02h screen currently scrolled back
  4757.         03h reduced capability driver
  4758.         A8h unsupported function (driver before v3.10)
  4759. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  4760. --------V-2F1AA9-----------------------------
  4761. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  4762.     AX = 1AA9h
  4763. Return: AL = status
  4764.         00h successful
  4765.         BX = current number of lines in scrollback buffer
  4766.         CX = number of bytes in one line
  4767.         01h unsupported video mode active
  4768.         02h screen currently scrolled back
  4769.         03h reduced capability driver
  4770.         A9h unsupported function (driver before v3.10)
  4771. Desc:    determine how much data is in the scrollback buffer and initialize
  4772.       scrollback retrieval to return the first line on the next call to
  4773.       AX=1AA8h
  4774. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  4775. --------V-2F1AAA-----------------------------
  4776. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  4777.     AX = 1AAAh
  4778.     BX = function
  4779.         FFFFh to get current blanking time
  4780.         other to set time
  4781.         CX = blanking time in clock ticks (0000h-7FFFh)
  4782. Return: BX = current blanking time
  4783.     CX = blanking time when last set
  4784. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  4785. --------V-2F1AAB-----------------------------
  4786. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  4787.     AX = 1AABh
  4788.     BX = repeat rate in characters per second
  4789.         0000h use BIOS repeat rate
  4790. Return: nothing
  4791. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  4792. --------V-2F1AAC-----------------------------
  4793. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  4794.     AX = 1AACh
  4795.     BH = number of bytes per character pattern
  4796.     BL = VGA/EGA character table to be loaded
  4797.     CX = number of characters to load
  4798.     DX = starting character code (offset into Map2 block)
  4799.     ES:BP -> user character table to be loaded
  4800. Return: AX = 1100h
  4801. Desc:    load the EGA/VGA character generator without the BIOS function's
  4802.       side effects of resetting the video mode and color palette
  4803. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  4804. --------V-2F1AAD-----------------------------
  4805. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  4806.     AX = 1AADh
  4807.     BL = report request code (81h-96h for v4.00)
  4808.     CX = color selector or key code, if required by request
  4809. Return: AX = first reported result
  4810.     BX = second result
  4811.     CX = third result, if applicable (unchanged otherwise)
  4812.     DX = fourth result, if applicable (unchanged otherwise)
  4813. Desc:    get device status reports equivalent to those for Esc [#n sequences
  4814.       while bypassing any device redirection and avoiding the need to
  4815.       parse the returned result
  4816. Note:    the report request code in BL is identical to the number in the
  4817.       corresponding Esc [#n sequence
  4818. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  4819. --------V-2F1AADDX0000-----------------------
  4820. INT 2F U - AVATAR.SYS v0.11 - ???
  4821.     AX = 1AADh
  4822.     DX = 0000h
  4823.     CX = subfunction (00h-0Ch)
  4824.     ???
  4825. Return: AX = 0000h if DX was nonzero
  4826.     ???
  4827. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  4828. --------V-2F1AAC-----------------------------
  4829. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  4830.     AX = 1AACh
  4831. --------m-2F1B00-----------------------------
  4832. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4833.     AX = 1B00h
  4834. Return: AL = FFh if installed
  4835. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4836.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4837.       which excludes the physical pages being used by DOS.
  4838. SeeAlso: AH=1Bh"FRAME INFO"
  4839. --------m-2F1B-------------------------------
  4840. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4841.     AH = 1Bh
  4842.     AL <> 00h
  4843.     DI = hidden physical page number
  4844. Return: AX = FFFFh if failed (no such hidden page)
  4845.     AX = 0000h if OK, then
  4846.         ES = segment of page frame
  4847.         DI = physical page number
  4848. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4849.     FASTOPEN makes this call with AL = FFh
  4850. SeeAlso: AX=1B00h
  4851. --------V-2F2300-----------------------------
  4852. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4853.     AX = 2300h
  4854. Return: AH = FFh
  4855. Note:    this installation check does not follow the usual format
  4856. SeeAlso: AH=23h,AX=2E00h
  4857. --------V-2F23-------------------------------
  4858. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4859.     AH = 23h
  4860.     AL nonzero
  4861. Return: AH = FFh
  4862.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  4863. SeeAlso: AX=2300h,AX=2E00h
  4864. --------T-2F2700-----------------------------
  4865. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4866.     AX = 2700h
  4867. Return: AL = status
  4868.         00h not installed
  4869.         FFh installed
  4870. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  4871.       taskswitching mode
  4872. --------T-2F2701-----------------------------
  4873. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4874.     AX = 2701h
  4875. Return: AX = maximum simultaneous tasks
  4876.     BX = index into TASK_IDS of current foreground task
  4877.     CX = currently-active tasks
  4878.     DX = version number (DL = major, DH = minor)
  4879.         (DR-DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  4880.     ES:SI -> TASK_IDS
  4881.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4882. Notes:    do not attempt to create a new task if CX == AX
  4883.     the task's index is its position on the task menu, while its ID is the
  4884.       position within the internal task name table
  4885. SeeAlso: AX=2714h,AX=2716h
  4886. --------T-2F2702-----------------------------
  4887. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4888.     AX = 2702h
  4889. Return: DX = maximum pages INT 67/AH=42h will report available
  4890. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4891.       amount which is reported as being available at a given time
  4892. SeeAlso: AX=2703h,INT 67/AH=42h
  4893. --------T-2F2703-----------------------------
  4894. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4895.     AX = 2703h
  4896.     DX = maximum pages INT 67/AH=42h should report available
  4897. Return: DX = new maximum for reporting
  4898. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  4899.       taskswitching mode
  4900. SeeAlso: AX=2702h,INT 67/AH=42h
  4901. --------T-2F2704-----------------------------
  4902. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  4903.     AX = 2704h
  4904.     DL = subfunction
  4905.         00h unregister task manager
  4906.         01h register task manager
  4907. Return: DL = status
  4908.         00h registered
  4909.         01h unregistered
  4910. Notes:    a task manager replaces TaskMAX's menu system with its own user
  4911.       interface; while one is registered, the TaskMAX hotkeys and
  4912.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  4913.     unregister the task manager before terminating it
  4914. SeeAlso: AX=2705h
  4915. Index:    hotkeys;TaskMAX
  4916. --------T-2F2705-----------------------------
  4917. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  4918.     AX = 2705h
  4919.     DL = subfunction
  4920.         00h disable keystrokes for switching to next/prev/specified task
  4921.         01h enable
  4922. Return: nothing
  4923. Note:    should only be called by a registered task manager (see AX=2704h)
  4924. SeeAlso: AX=2704h,AX=2706h
  4925. --------T-2F2706-----------------------------
  4926. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  4927.     AX = 2706h
  4928.     DX = task index (see AX=2701h) of task to be activated
  4929. Return: DX = task index of previously-active task
  4930. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  4931.       taskswitching mode
  4932. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  4933. --------T-2F2707-----------------------------
  4934. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  4935.     AX = 2707h
  4936.     DS:DX -> ASCIZ pathname of executable
  4937.     ES:BX -> parameter block (see #1459)
  4938.     CX = number of ticks before automatic return to task manager
  4939.         (0000h = run until termination or explicitly switched)
  4940. Return: DX = new task's task index (FFFFh if task terminated)
  4941. SeeAlso: AX=2706h,AX=2708h
  4942.  
  4943. Format of TaskMAX parameter block:
  4944. Offset    Size    Description    (Table 1459)
  4945.  00h    WORD    reserved, should be 0000h
  4946.  02h    DWORD    pointer to command tail to be copied into child's PSP
  4947.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  4948.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  4949. --------T-2F2708-----------------------------
  4950. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  4951.     AX = 2708h
  4952.     DX = task index
  4953. Return: DX = FFFFh (task deleted)
  4954. Notes:    this call should only be used for abnormal task termination, after
  4955.       first checking for open files with AX=270Ch; should not be used
  4956.       with programs that allocate EMS or XMS memory
  4957.     switches to specified task first
  4958. SeeAlso: AX=2707h
  4959. --------T-2F2709-----------------------------
  4960. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  4961.     AX = 2709h
  4962.     DX = task index
  4963.     DS:SI -> 8-byte name (8 NULs = remove name)
  4964. Return: AL = task flags
  4965.         00h ID unused or task terminated
  4966.         01h ID in use, task name table entry valid
  4967.         81h ID in use, task name fixed
  4968.     BX = task ID
  4969.     ES:DI -> name in task name table (see AX=2701h)
  4970. Note:    the task retains the given name until it terminates or the name is
  4971.       removed by specifying a name of 8 NULs.
  4972. SeeAlso: AX=2701h,AX=2707h
  4973. --------T-2F270A-----------------------------
  4974. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  4975.     AX = 270Ah
  4976.     DX = task index
  4977. Return: DX = task ID (FFFFh if index invalid)
  4978. Note:    task IDs stay constant, while indexes can change when other tasks are
  4979.       deleted
  4980. SeeAlso: AX=2701h,AX=270Bh
  4981. --------T-2F270B-----------------------------
  4982. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  4983.     AX = 270Bh
  4984.     DX = task ID
  4985. Return: DX = task index (FFFFh if task not active)
  4986. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  4987.       taskswitching mode
  4988. SeeAlso: AX=270Ah
  4989. --------T-2F270C-----------------------------
  4990. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  4991.     AX = 270Ch
  4992.     DX = task index
  4993. Return: AX = number of files currently open for specified task
  4994. SeeAlso: AX=2708h
  4995. --------T-2F270D-----------------------------
  4996. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  4997.     AX = 270Dh
  4998.     DX = task index
  4999. Return: DX = status
  5000.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5001.         0001h if not in root shell for task
  5002. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5003.       command interpreter with AX=2707h
  5004. SeeAlso: AX=2707h,AX=270Ch
  5005. --------T-2F270E-----------------------------
  5006. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5007.     AX = 270Eh
  5008.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5009.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5010. Return: ES:DI -> current lead-in string
  5011. Note:    the specified sequence of keystrokes is sent to the application before
  5012.       every line of a text-mode spreadsheet paste
  5013. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5014. --------T-2F270F-----------------------------
  5015. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5016.     AX = 270Fh
  5017.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5018.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5019. Return: ES:DI -> current lead-in string
  5020. Note:    the specified sequence of keystrokes is sent to the application before
  5021.       every number in a numeric-mode spreadsheet paste
  5022. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5023. --------T-2F2710-----------------------------
  5024. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5025.     AX = 2710h
  5026.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5027.     DS:SI -> pasting terminator string (character/scan-code pairs)
  5028. Return: ES:DI -> current terminator string
  5029. Note:    the specified sequence of keystrokes is sent to the application after
  5030.       every line of a spreadsheet paste operation
  5031. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5032. --------T-2F2711-----------------------------
  5033. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5034.     AX = 2711h
  5035.     DX = ASCII code for separator (FFFFh to get current)
  5036. Return: DL = current separator character
  5037. SeeAlso: AX=270Fh
  5038. --------T-2F2712-----------------------------
  5039. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5040.     AX = 2712h
  5041.     DX = task index
  5042. --------T-2F2713-----------------------------
  5043. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5044.     AX = 2713h
  5045.     DX = task index
  5046.     CX = paste mode
  5047.         0000h alphanumeric
  5048.         0001h numeric
  5049.         0002h text
  5050. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5051. --------T-2F2714-----------------------------
  5052. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5053.     AX = 2714h
  5054. Return: CX = total KB of swap space
  5055.     DX = available KB of swap space
  5056. SeeAlso: AX=2701h
  5057. --------T-2F2715-----------------------------
  5058. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5059.     AX = 2715h
  5060. Return: only after calling task is again selected
  5061. SeeAlso: AX=2706h
  5062. --------T-2F2716-----------------------------
  5063. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5064.     AX = 2716h
  5065. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5066.         CX = bytes in paste buffer
  5067.         DX = current generation number (updated after every copy operation)
  5068. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5069. --------T-2F2717-----------------------------
  5070. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5071.     AX = 2717h
  5072.     CX = bytes in destination buffer
  5073.     ES:DI -> destination buffer
  5074. Return: AX = 0000h if function supported
  5075.         CX = bytes actually copied (FFFFh if buffer too small)
  5076.         DX = current generation number for paste buffer
  5077. Note:    the destination buffer may be too small if another task adds more data
  5078.       to the paste buffer after the AX=2716h call but before this call
  5079. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5080. --------T-2F2718-----------------------------
  5081. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5082.     AX = 2718h
  5083.     CX = bytes in source buffer
  5084.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5085. Return: AX = 0000h if function supported
  5086.         CX = bytes actually copied
  5087.         DX = current generation number for paste buffer
  5088. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5089. --------T-2F2719-----------------------------
  5090. INT 2F - Novell DOS 7 TaskMGR - NOP
  5091.     AX = 2719h to 271Bh
  5092. --------T-2F271C-----------------------------
  5093. INT 2F U - Novell DOS 7 TaskMGR - ???
  5094.     AX = 271Ch
  5095.     DX = ???
  5096.         bit 0: ???
  5097. Return: ???
  5098.     ---if DX bit 0 set---
  5099.     AX = 0031h
  5100.     CX = 0000h
  5101. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  5102.       function will crash because its exit code attempts to pop several
  5103.       registers which are not pushed when DX bit 0 is set
  5104. --------m-2F2780CL01-------------------------
  5105. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5106.     AX = 2780h
  5107.     CL = 01h (function number)
  5108.     CH = subfunction
  5109.         00h unused
  5110.         Return: CX = status (0002h) (see #1460)
  5111.         01h unused
  5112.         Return: CX = status (0002h) (see #1460)
  5113.         02h ???
  5114.         BX = ??? (0005h-000Fh)
  5115.         Return: CX = status (0000h,0030h) (see #1460)
  5116.         03h allocate ???
  5117.         DX = ???
  5118.         Return: CX = status (0000h,0003h) (see #1460)
  5119.         04h get ???
  5120.         Return: CX = 0000h (successful)
  5121.             BX = selector for EMM386 data segment
  5122.             EBX high word cleared
  5123.         05h ???
  5124.         EDX = ???
  5125.         Return: ???
  5126.         06h return to real mode via triple fault
  5127.         07h debugger break
  5128.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  5129.               mark
  5130.         08h get ???
  5131.         Return: CX = 0000h (successful)
  5132.             EBX = ??? (0 or 2)
  5133.         09h ???
  5134.         0Ah ???
  5135.         0Bh unused
  5136.         Return: CX = status (0002h) (see #1460)
  5137.         0Ch ??? manipulates DOS memory chain
  5138.         0Dh ???
  5139.         EBX = ???
  5140.         EDX = ???
  5141.         Return: ???
  5142.         0Eh ???
  5143.         Return: CX = 0000h (successful)
  5144.             BL = ???     \ or BX = 0000h
  5145.             BH = ???     /
  5146.         0Fh get ???
  5147.         Return: CX = 0000h (successful)
  5148.             EBX = ???
  5149.         10h get and set ???
  5150.         EDX = ???
  5151.         Return: CX = 0000h (successful)
  5152.             EBX = old value of ???
  5153.         11h get ???
  5154.         Return: CX = 0000h (successful)
  5155.             EBX = ??? (0100h)
  5156.         12h get and set ???
  5157.         DX = ???
  5158.         Return: CX = 0000h (successful)
  5159.             AX = old value of ???
  5160.         13h ???
  5161.         Return: CX = status (0000h,003Fh) (see #1460)
  5162.             AX = ???
  5163.         14h ???
  5164.         EDX = ???
  5165.         Return: CX = status (0000h,003Fh) (see #1460)
  5166.         15h ???
  5167.         BX = segment of ???
  5168.         Return: CX = 0000h (successful)
  5169.             BX = segment of ???
  5170.         16h ???
  5171.         17h ???
  5172.         EBX = subfunction (0-2)
  5173.         Return: CX = status (0002h if EBX>2) (see #1460)
  5174.             ???
  5175.         18h unused
  5176.         Return: CX = status (0002h) (see #1460)
  5177. Return: CX = status (most subfunctions)
  5178.     (E)AX and/or (E)BX contain return values, depending on function
  5179. Notes:    called by DPMS.EXE and EMM386.EXE
  5180.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5181.       because the request is handled on the initial trap to the memory
  5182.       manager caused by INT instructions, this API must be invoked with
  5183.       an actual INT 2F instruction instead of some simulation such as a
  5184.       far call to the address in the interrupt vector table
  5185. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  5186.  
  5187. (Table 1460)
  5188. Values for Novell DOS 7 EMM386 function status:
  5189.  0000h    successful
  5190.  0001h    invalid function???
  5191.  0002h    invalid subfunction
  5192.  0003h    ???
  5193.  0004h    invalid ??? index
  5194.  0005h    ???
  5195.  0006h    ???
  5196.  0007h    ???
  5197.  0009h    ???
  5198.  000Ah    ???
  5199.  000Bh    invalid ??? handle
  5200.  000Ch    ???
  5201.  000Dh    ???
  5202.  000Eh    ???
  5203.  000Fh    ???
  5204.  0014h    ???
  5205.  0023h    ???
  5206.  0030h    ???
  5207.  003Fh    ???
  5208. --------m-2F2780CL02-------------------------
  5209. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5210.     AX = 2780h
  5211.     CL = 02h (function number)
  5212.     CH = subfunction
  5213.         00h ???
  5214.         ???
  5215.         Return: CX = status (0000h,0023h, others???) (see #1460)
  5216.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  5217.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  5218.               func 02h/sf 0Bh, and func 04h/sf 01h
  5219.         01h get and clear ???
  5220.         DX = ??? handle or 0000h for default
  5221.         Return: CX = status (0000h,000Bh) (see #1460)
  5222.             EBX = old value of ??? if successful
  5223.             EDX destroyed
  5224.         02h ???
  5225.         DX = index of ???
  5226.         Return: CX = status (0000h,0004h,0005h) (see #1460)
  5227.             EBX = 0000FFFFh on error, 00000000h if successful
  5228.         03h ???
  5229.         DX = index of ???
  5230.         Return: CX = status (0000h,0004h,0006h) (see #1460)
  5231.             BX = FFFFh on error, 0000h if successful
  5232.         04h ???
  5233.         Return: CX = status (0000h,0007h,000Ah) (see #1460)
  5234.         05h ???
  5235.         EDX -> ??? data (first 8 bytes seem to be name)
  5236.         Return: CX = status (0000h,0009h,000Dh) (see #1460)
  5237.         06h ???
  5238.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  5239.         07h ???
  5240.         EDX = ???
  5241.         Return: CX = status (0000h,0009h,000Eh) (see #1460)
  5242.         08h ???
  5243.         EDX = ???
  5244.         Return: CX = status (0000h,0009h,000Eh) (see #1460)
  5245.         09h ???
  5246.         EDX = ???
  5247.         Return: CX = status (0000h,0009h,000Fh) (see #1460)
  5248.         0Ah ???
  5249.         EDX = ???
  5250.         Return: CX = status (0000h,0009h,000Fh) (see #1460)
  5251.         0Bh ???
  5252.         DX = ???
  5253.         Return: CX = 0000h (successful)
  5254.         0Ch ???
  5255.         Return: CX = 0000h (successful)
  5256.         0Dh ???
  5257.         Return: CX = status (0000h,0023h) (see #1460)
  5258.             BX = FFFFh on error, 0000h if successful
  5259.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  5260.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  5261.         0Eh ???
  5262.         ???
  5263.         Return: CX = status (0000h,000Ch) (see #1460)
  5264.             EBX = ??? if successful
  5265.         0Fh ???
  5266.         BX = ???
  5267.         DX = ??? handle or 0000h for default
  5268.         Return: CX = status (0000h,000Bh) (see #1460)
  5269.         10h get ??? handle
  5270.         Return: CX = 0000h (successful)
  5271.             BX = handle of default ???
  5272.             EBX high word cleared
  5273.         11h ???
  5274.         DX = ??? handle or 0000h for default
  5275.         BX = ??? (handle???)
  5276.         Return:    CX = status (0000h,000Bh,0014h) (see #1460)
  5277.         12h ???
  5278.         BX = ???
  5279.         DX = ???
  5280.         Return: CX = 0000h (successful)
  5281.         13h ???
  5282.         DX = ???
  5283.         Return: CX = status (see #1460)
  5284.         14h ???
  5285.         BX = ???
  5286.         DX = ???
  5287.         Return: CX = status (0000h,0014h) (see #1460)
  5288.             BX = FFFFh on error, ??? if successful
  5289.         15h set ??? flags
  5290.         BX = ??? (low two bits only)
  5291.         DX = ??? handle or 0000h for default
  5292.         Return: CX = status (0000h,000Bh) (see #1460)
  5293.             BX = new value of ??? flags (entire word)
  5294.             EBX high register cleared
  5295.         16h clear ??? flag for default ???
  5296.         Return: CX = 0000h (successful)
  5297.         17h ???
  5298.         18h ???
  5299.         19h ???
  5300.         1Ah ???
  5301.         1Bh ???
  5302.         1Ch ???
  5303.         1Dh ???
  5304.         1Eh ???
  5305.         1Fh ???
  5306.         20h ???
  5307.         21h ???
  5308.         22h ???
  5309.         23h ???
  5310.         24h ???
  5311.         25h ???
  5312.         26h ???
  5313.         27h ???
  5314.         28h ???
  5315.         29h ???
  5316.         2Ah ???
  5317.         2Bh ???
  5318.         2Ch ???
  5319.         2Dh ???
  5320.         2Eh ???
  5321.         2Fh ???
  5322.         30h ???
  5323.         31h ???
  5324.         32h ???
  5325.         33h ???
  5326.         34h ???
  5327.         35h ???
  5328.         36h ???
  5329.         37h ???
  5330.         38h ???
  5331.         39h ???
  5332.         3Ah ???
  5333.         3Bh ???
  5334.         3Ch ???
  5335.         3Eh ???
  5336.         3Fh ???
  5337.         40h ???
  5338.         41h ???
  5339.         42h ???
  5340.         43h ???
  5341.         44h ???
  5342.         45h ???
  5343.         46h ???
  5344.         47h ???
  5345. Return: CX = status (most subfunctions)
  5346.     (E)AX and/or (E)BX contain return values, depending on function
  5347. Notes:    called by DPMS.EXE and EMM386.EXE
  5348.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5349.       because the request is handled on the initial trap to the memory
  5350.       manager caused by INT instructions, this API must be invoked with
  5351.       an actual INT 2F instruction instead of some simulation such as a
  5352.       far call to the address in the interrupt vector table
  5353. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  5354. --------m-2F2780CL03-------------------------
  5355. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5356.     AX = 2780h
  5357.     CL = 03h (function number)
  5358.     CH = subfunction
  5359.         00h ???    
  5360.         01h ???
  5361.         02h ???
  5362.         03h ???
  5363.         04h ???
  5364.         05h ???
  5365.         06h ???
  5366.         07h ???
  5367.         08h ???
  5368.         09h ???
  5369.         0Ah ???
  5370.         0Bh ???
  5371.         0Ch ???
  5372.         0Dh ???
  5373.         0Eh ???
  5374.         0Fh ???
  5375.         10h ???
  5376.         11h ???
  5377.         12h ???
  5378.         13h ???
  5379.         14h ???
  5380.         15h ???
  5381.         16h ???
  5382.         17h ???
  5383.         18h ???
  5384.         19h ???
  5385.         1Ah ???
  5386.         1Bh ???
  5387.         1Ch ???
  5388.         1Dh ???
  5389.         1Eh ???
  5390.         1Fh ???
  5391.         20h ???
  5392.         21h ???
  5393.         22h ???
  5394.         23h ???
  5395.         24h ???
  5396.         25h ???
  5397.         26h ???
  5398.         27h ???
  5399.         28h ???
  5400.         29h ???
  5401.         2Ah ???
  5402.         2Bh ???
  5403.         2Ch ???
  5404.         2Dh ???
  5405.         2Eh ???
  5406.         2Fh ???
  5407.         30h ???
  5408.         31h ???
  5409.         32h ???
  5410.         33h ???
  5411.         34h ???
  5412.         35h ???
  5413.         36h ???
  5414.         37h ???
  5415. Return: CX = status (most subfunctions)
  5416.     (E)AX and/or (E)BX contain return values, depending on function
  5417. Notes:    called by DPMS.EXE and EMM386.EXE
  5418.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5419.       because the request is handled on the initial trap to the memory
  5420.       manager caused by INT instructions, this API must be invoked with
  5421.       an actual INT 2F instruction instead of some simulation such as a
  5422.       far call to the address in the interrupt vector table
  5423. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  5424. --------m-2F2780CL04-------------------------
  5425. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5426.     AX = 2780h
  5427.     CL = 04h (function number)
  5428.     CH = subfunction
  5429.         00h ???    
  5430.         01h ???
  5431.         02h ???
  5432.         03h ???
  5433.         04h ???
  5434.         05h ???
  5435.         06h ???
  5436.         07h ???
  5437.         08h ???
  5438.         09h ???
  5439.         0Ah ???
  5440.         0Bh ???
  5441.         0Ch ???
  5442.         0Dh ???
  5443.         0Eh ???
  5444.         0Fh ???
  5445.         10h ???
  5446.         11h ???
  5447.         12h ???
  5448.         13h ???
  5449.         14h ???
  5450.         15h ???
  5451.         16h ???
  5452.         17h ???
  5453.         18h ???
  5454.         19h ???
  5455.         1Ah ???
  5456.         1Bh ???
  5457.         1Ch ???
  5458.         1Dh ???
  5459.         1Eh ???
  5460.         1Fh ???
  5461.         20h ???
  5462.         21h ???
  5463.         22h ???
  5464.         23h ???
  5465.         24h ???
  5466.         25h ???
  5467.         26h ???
  5468.         27h ???
  5469.         28h ???
  5470.         29h ???
  5471.         2Ah ???
  5472.         2Bh ???
  5473.         2Ch ???
  5474.         2Dh ???
  5475.         2Eh ???
  5476.         2Fh ???
  5477.         30h ???
  5478.         31h ???
  5479.         32h ???
  5480. Return: CX = status (most subfunctions)
  5481.     (E)AX and/or (E)BX contain return values, depending on function
  5482. Notes:    called by DPMS.EXE and EMM386.EXE
  5483.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5484.       because the request is handled on the initial trap to the memory
  5485.       manager caused by INT instructions, this API must be invoked with
  5486.       an actual INT 2F instruction instead of some simulation such as a
  5487.       far call to the address in the interrupt vector table
  5488. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5489. --------m-2F2780CL05-------------------------
  5490. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5491.     AX = 2780h
  5492.     CL = 05h
  5493.     ???
  5494. Return: ???
  5495. Notes:    called by DPMS.EXE and EMM386.EXE
  5496.     the handler for this function may be set by one of the subfunctions
  5497.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5498.       CX=0001h (see #1460)
  5499.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5500.       because the request is handled on the initial trap to the memory
  5501.       manager caused by INT instructions, this API must be invoked with
  5502.       an actual INT 2F instruction instead of some simulation such as a
  5503.       far call to the address in the interrupt vector table
  5504. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5505. --------m-2F2780CL06-------------------------
  5506. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5507.     AX = 2780h
  5508.     CL = 06h
  5509.     ???
  5510. Return: ???
  5511. Notes:    called by DPMS.EXE and EMM386.EXE
  5512.     the handler for this function may be set by one of the subfunctions
  5513.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  5514.       CX=0001h (see #1460)
  5515.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5516.       because the request is handled on the initial trap to the memory
  5517.       manager caused by INT instructions, this API must be invoked with
  5518.       an actual INT 2F instruction instead of some simulation such as a
  5519.       far call to the address in the interrupt vector table
  5520. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5521. --------m-2F2780-----------------------------
  5522. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  5523.     AX = 2780h
  5524.     CL = function (07h-0Fh)
  5525.     ???
  5526. Return: ???
  5527. Notes:    called by DPMS.EXE and EMM386.EXE
  5528.     the handlers for each of these functions may be set individually by
  5529.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  5530.       return with all registers unchanged
  5531.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  5532.       because the request is handled on the initial trap to the memory
  5533.       manager caused by INT instructions, this API must be invoked with
  5534.       an actual INT 2F instruction instead of some simulation such as a
  5535.       far call to the address in the interrupt vector table
  5536. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  5537. --------T-2F2781-----------------------------
  5538. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  5539.     AX = 2781h
  5540. Return: ???
  5541. SeeAlso: AX=2782h
  5542. --------T-2F2782-----------------------------
  5543. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  5544.     AX = 2782h
  5545. Return: ???
  5546. SeeAlso: AX=2781h
  5547. --------m-2F2783-----------------------------
  5548. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  5549.     AX = 2783h
  5550. Return: AX = ???
  5551.     BX = ???
  5552. --------T-2F278F-----------------------------
  5553. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  5554.     AX = 278Fh
  5555.     as for INT 2F/AX=2780h
  5556. Return: as for INT 2F/AX=2780h
  5557. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  5558.       without changing any other registers
  5559. SeeAlso: AX=2780h,AX=2782h
  5560. --------F-2F2A-------------------------------
  5561. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5562.     AH = 2Ah
  5563. Note:    details not available at this time
  5564. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5565. --------V-2F2E00-----------------------------
  5566. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  5567.     AX = 2E00h
  5568. Return: AH = FFh if installed
  5569. Note:    this installation check does not follow the usual format of setting
  5570.       AL to FFh
  5571. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  5572. --------V-2F2E-------------------------------
  5573. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  5574.     AH = 2Eh
  5575.     AL nonzero
  5576. Return: AH = FFh if installed
  5577.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  5578. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  5579. --------t-2F3900-----------------------------
  5580. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5581.     AX = 3900h
  5582. Return: AL = status
  5583.         00h not installed
  5584.         FFh one or more TSRs using this interface is installed
  5585.         DX may be destroyed
  5586. Note:    this function is provided to that the multiplex number will appear used
  5587.       to other programs
  5588. SeeAlso: AH=39h/BL=00h
  5589. --------t-2F39--BL00-------------------------
  5590. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5591.     AH = 39h
  5592.     BL = 00h
  5593.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #1461)
  5594. Return: AL = status
  5595.         00h not installed
  5596.         FFh installed
  5597.         DX = segment address of resident module
  5598. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5599.       resident module is installed by allocating a block of upper memory,
  5600.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  5601.       field with the TSR's name.
  5602. SeeAlso: #1462,AX=3900h,AH=39h/BL=01h
  5603.  
  5604. (Table 1461)
  5605. Values for Kingswood TSR ID number:
  5606.  01h    TSR Windows
  5607.  02h    NOBUSY
  5608.  03h    CD STACK
  5609.  04h    DISK WATCH
  5610.  05h    PUSHBP
  5611.  06h    ALIAS
  5612.  07h    KEYMACRO
  5613.  08h    SLOWDOWN
  5614.  09h    ANSIGRAB
  5615.  0Ah    TEE
  5616.  0Bh    FASTMOUS
  5617.  0Ch    EXTWILD
  5618.  0Dh    BREAKOUT
  5619.  0Eh    STOPDISK
  5620.  0Fh    MEMINIT
  5621.  10h    JANUSEXT
  5622.  11h    CAPS
  5623.  12h    ANSI
  5624.  13h    TRAPPER
  5625.  14h    EATMEM
  5626.  15h    WPJOKE
  5627.  16h    SHOWDOS
  5628.  17h    LOGINTS
  5629.  18h    BLANKVGA
  5630.  19h    SWAPEXEC
  5631.  1Ah    SHELL
  5632.  1Bh    TSRGAMES
  5633.  
  5634. Format of Kingswood TSR modules:
  5635. Offset    Size    Description    (Table 1462)
  5636.  00h  4 BYTEs    signature "FTSR"
  5637.  04h    WORD    segment address of this module (used to check validity)
  5638.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5639.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5640.         (usually only a PSP if file access is required)
  5641.      5N BYTEs    interrupt list (see #1463)
  5642.     BYTE    FFh terminator
  5643.  
  5644. Format of Kingswood TSR interrupt list entry:
  5645. Offset    Size    Description    (Table 1463)
  5646.  00h    BYTE    interrupt number (00h-FEh)
  5647.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5648.  03h    WORD    offset within segment of begin of interrupt handler code
  5649. --------t-2F39--BL01-------------------------
  5650. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5651.     AH = 39h
  5652.     BL = 01h
  5653.     AL = TSR ID number (01h-FFh) (see #1461)
  5654. Return: AL = status
  5655.         00h not ready to be removed
  5656.         FFh resident module may be removed by deassigning the interrupts
  5657.           hooked by the TSR and deallocating the TSR's memory block
  5658.     AH,BX,CX,DX,ES may be destroyed
  5659. SeeAlso: AX=3900h,AH=39h/BL=00h
  5660. --------t-2F39-------------------------------
  5661. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5662.     AH = 39h
  5663.     BL = function number (02h-FFh)
  5664.     AL = TSR ID number (01h-FFh) (see #1461)
  5665.     CX,DX,SI,DI,DS,ES may contain parameters
  5666.     BH reserved for use by the function dispatcher
  5667. Return: as appropriate for the called function
  5668. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5669. --------r-2F3901BL02-------------------------
  5670. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5671.     AX = 3901h
  5672.     BL = 02h
  5673. Return: AX = error code (0000h if successful)
  5674.     SI,DI,DS,ES preserved
  5675. Notes:    opens the next TSR window on top of any others.     Only three
  5676.       TSR windows can be opened at any one time.  The three windows
  5677.       are all 40x11 characters, partly overlapping.
  5678. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5679. --------r-2F3901BL03-------------------------
  5680. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5681.     AX = 3901h
  5682.     BL = 03h
  5683. Return: AX = error code (0000h if successful)
  5684.     SI,DI,DS,ES preserved
  5685. Notes:    Hide any visible TSR windows from view.
  5686. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5687. --------r-2F3901BL04-------------------------
  5688. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5689.     AX = 3901h
  5690.     BL = 04h
  5691. Return: AX = error code (0000h if successful)
  5692.     SI,DI,DS,ES preserved
  5693. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5694. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5695. --------r-2F3901BL05-------------------------
  5696. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5697.     AX = 3901h
  5698.     BL = 05h
  5699. Return: AX = error code (0000h if successful)
  5700.     SI,DI,DS,ES preserved
  5701. Notes:    Close the last opened TSR window.
  5702. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5703. --------r-2F3901BL06-------------------------
  5704. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5705.     AX = 3901h
  5706.     BL = 06h
  5707.     DS:SI -> title string
  5708. Return: AX = error code (0000h if successful)
  5709.     SI,DI,DS,ES preserved
  5710. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5711. --------r-2F3901BL07-------------------------
  5712. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5713.     AX = 3901h
  5714.     BL = 07h
  5715.     CH = Y coordinate (0-10)
  5716.     CL = X coordinate (0-39)
  5717. Return: AX = error code (0000h if successful)
  5718.     SI,DI,DS,ES preserved
  5719. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5720.       this call only sets a text position
  5721. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5722. --------r-2F3901BL08-------------------------
  5723. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5724.     AX = 3901h
  5725.     BL = 08h
  5726.     DS:SI -> string
  5727. Return: AX = error code (0000h if successful)
  5728.     SI,DI,DS,ES preserved
  5729. Notes:    The text is not clipped.
  5730.     This routine understands Tab, NewLine and Carriage Return
  5731. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5732. --------r-2F3901BL09-------------------------
  5733. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5734.     AX = 3901h
  5735.     BL = 09h
  5736.     CL = scroll direction: 01h up, FFh down, 00h clear window
  5737. Return: AX = error code (0000h if successful)
  5738.     SI,DI,DS,ES preserved
  5739. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5740. --------r-2F3901BL0A-------------------------
  5741. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5742.     AX = 3901h
  5743.     BL = 0Ah
  5744.     DX = sound divisor, or 0 for silence.
  5745.          (divide 1843200 by required frequency to get value for DX)
  5746.     CL = sound length in 18.2 Hz clock ticks
  5747. Return: AX = error code (0000h if successful)
  5748.     SI,DI,DS,ES preserved
  5749. SeeAlso: AH=39h/BL=00h
  5750. --------r-2F3901BL0B-------------------------
  5751. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5752.     AX = 3901h
  5753.     BL = 0Bh
  5754.     CL = number of users increment: +1 if adding a new user
  5755.                     -1 if removing a user
  5756. Return: AX = error code (0000h if successful)
  5757.     SI,DI,DS,ES preserved
  5758. Note:    the TSR windows resident module may only be removed when the internal
  5759.       user count is zero
  5760. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5761. --------V-2F3912BL03-------------------------
  5762. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  5763.     AX = 3912h
  5764.     BL = 03h
  5765.     CL = new mode (00h fast, FFh BIOS)
  5766. Return: AL = old compatibility mode
  5767.     SI,DI,DS,ES preserved
  5768. SeeAlso: AX=3900h,AX=3912h/BL=04h
  5769. --------V-2F3912BL04-------------------------
  5770. INT 2F - Kingswood ANSI display driver - SET FLAGS
  5771.     AX = 3912h
  5772.     BL = 04h
  5773.     CL = new flags (see #1464)
  5774. Return: AL = old flags
  5775.     SI,DI,DS,ES preserved
  5776. SeeAlso: AX=3900h,AX=3912h/BL=03h
  5777.  
  5778. Bitfields for Kingswood ANSI flags:
  5779. Bit(s)    Description    (Table 1464)
  5780.  0    do not wrap at end of line
  5781.  1    wait for beeps to end before displaying next character
  5782.  2    do not use graphics cursor
  5783. --------W-2F4000-----------------------------
  5784. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5785.     AX = 4000h
  5786. Return: AL = video virtualization (see #1465)
  5787. Note:    this function is used by display drivers to find out what capabilities
  5788.       exist for the VDD driver and also trigger the VDD driver to call
  5789.       functions 4005h and 4006h.  This function also gives the Video Driver
  5790.       hardware access to the video registers.
  5791.  
  5792. (Table 1465)
  5793. Values for Windows video virtualization:
  5794.  01h    does not virtualize video access
  5795.  02h    virtualizes the video when in text mode
  5796.  03h    virtualizes the video when in text mode or single plane graphics modes
  5797.  04h    virtualizes the video when in text mode, single plane graphics modes,
  5798.       and VGA multiplane modes
  5799.  FFh    virtualizes the video fully
  5800. --------O-2F4001-----------------------------
  5801. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5802.     AX = 4001h
  5803. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5804.       and the video driver should save any necessary state
  5805. SeeAlso: AX=4002h,AX=4005h
  5806. --------O-2F4002-----------------------------
  5807. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5808.     AX = 4002h
  5809. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5810.       and the video driver should restore the previously-saved state
  5811. SeeAlso: AX=4001h,AX=4006h
  5812. --------W-2F4003-----------------------------
  5813. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5814.     AX = 4003h
  5815. Note:    This critical section must be exited within 1 second.
  5816. SeeAlso: AX=4004h
  5817. --------W-2F4004-----------------------------
  5818. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5819.     AX = 4004h
  5820. SeeAlso: AX=4003h
  5821. --------W-2F4005-----------------------------
  5822. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5823.     AX = 4005h
  5824. Note:    called by Windows when the DOS box is about to be placed in the
  5825.       background and the video driver should save any necessary state
  5826.       information (this may be called only in Standard mode)
  5827. SeeAlso: AX=4001h,AX=4006h
  5828. --------W-2F4006-----------------------------
  5829. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5830.     AX = 4006h
  5831. Note:    called by Windows when the DOS box is about to be placed in the
  5832.       foreground and the video driver should restore any necessary state
  5833.       information (this may be called only in Standard mode)
  5834. SeeAlso: AX=4002h,AX=4005h
  5835. --------W-2F4007-----------------------------
  5836. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5837.     AX = 4007h
  5838. Note:    used by Windows Standard mode
  5839. --------O-2F4010-----------------------------
  5840. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  5841.     AX = 4010h
  5842. Return: AX = 4010h if OS/2 not installed
  5843.     AX = 0000h for OS/2 Warp 3.0
  5844.     BX = OS/2 version if installed
  5845. Note:    OS/2 Warp 3.0 
  5846. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  5847. --------E-2F4040-----------------------------
  5848. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5849.     AX = 4040h
  5850. Return: BX:CX -> ???
  5851. --------N-2F4100-----------------------------
  5852. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5853.     AX = 4100h
  5854. Return: CF clear if successful
  5855.         AL = FFh
  5856.     CF set on error
  5857.         AX = ???
  5858. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5859.     LAN Manager enhanced mode adds features beyond the standard redirector
  5860.       file/printer services
  5861. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5862. --------N-2F4103-----------------------------
  5863. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5864.     AX = 4103h
  5865. Return: ???
  5866. SeeAlso: AX=4100h,AX=4104h
  5867. --------N-2F4104-----------------------------
  5868. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5869.     AX = 4104h
  5870. Return: ???
  5871. SeeAlso: AX=4100h,AX=4103h
  5872. --------N-2F42-------------------------------
  5873. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5874.     AH = 42h
  5875.     ???
  5876. Return: ???
  5877. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5878.       file/printer services
  5879. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5880. --------m-2F4300-----------------------------
  5881. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5882.     AX = 4300h
  5883. Return: AL = 80h XMS driver installed
  5884.     AL <> 80h no driver
  5885. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5886.       above 640K
  5887.     this installation check DOES NOT follow the format used by other
  5888.       software
  5889. SeeAlso: AX=4310h
  5890. Index:    installation check;XMS version 2+
  5891. --------m-2F4308-----------------------------
  5892. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5893.     AX = 4308h
  5894. Return: AL = 43h if supported
  5895.         BL = A20 handler number (value of /MACHINE:nn switch)
  5896.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5897. Note:    if the A20 handler number returned in BL is 00h, an external handler
  5898.       is being used (see AX=4330h)
  5899. SeeAlso: AX=4309h,AX=4330h
  5900. --------m-2F4309-----------------------------
  5901. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5902.     AX = 4309h
  5903. Return: AL = 43h if function supported
  5904.         ES:BX -> XMS handle table (see #1466)
  5905. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5906. SeeAlso: AX=4308h
  5907.  
  5908. Format of XMS handle table:
  5909. Offset    Size    Description    (Table 1466)
  5910.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5911.  01h    BYTE    size of one handle descriptor
  5912.  02h    WORD    number of handles (default = 20h)
  5913.  04h    DWORD    pointer to XMS handle array (see #1467)
  5914. SeeAlso: #1496
  5915.  
  5916. Format of XMS handle descriptor [array]:
  5917. Offset    Size    Description    (Table 1467)
  5918.  00h    BYTE    flag
  5919.         01h=free, 02h=used, 04h=in pool but not associated with any EMB
  5920.  01h    BYTE    lock count (00h=unlocked)
  5921.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5922.  06h    DWORD    size of XMS block in KB
  5923. --------m-2F4310-----------------------------
  5924. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5925.     AX = 4310h
  5926. Return: ES:BX -> driver entry point (see #1468,#1469,#1472,#1479,#1488,#1493)
  5927. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5928.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  5929.       the driver entry point
  5930. SeeAlso: AX=4300h,AX=4310h"Cloaking",AX=4310h"Netroom"
  5931.  
  5932. Format of XMS driver entry point:
  5933. Offset    Size    Description    (Table 1468)
  5934.  00h  5 BYTEs    jump to actual handler
  5935.         either short jump (EBh XXh) followed by three NOPs or
  5936.           far jump (EAh XXXX:XXXX) to a program which has hooked itself
  5937.           into the XMS driver chain
  5938. Note:    to hook into the XMS driver chain, a program should follow the chain of
  5939.       far jumps until it reaches the short jump of the driver at the end
  5940.       of the chain; this short jump is to be replaced with a far jump to
  5941.       the new handler's entry point, which should contain a short jump
  5942.       followed by three NOPs.  The new handler must return to the address
  5943.       pointed at by the short jump which was overwritten.  Using this
  5944.       method, the new handler becomes the first to see every XMS request.
  5945.  
  5946. (Table 1469)
  5947. Call the XMS driver "Get XMS version number" function with:
  5948.     AH = 00h
  5949. Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5950.     BX = internal revision number (in BCD for HIMEM.SYS)
  5951.     DX = High Memory Area (HMA) state
  5952.         0001h HMA (1M to 1M + 64K) exists
  5953.         0000h HMA does not exist
  5954. SeeAlso: #1470,#1471,#1476,#1477,#1483
  5955.  
  5956. (Table 1470)
  5957. Call the XMS driver "Request High Memory Area" function with:
  5958.     AH = 01h
  5959.     DX = memory in bytes (for TSR or device drivers)
  5960.         FFFFh if application program
  5961. Return: AX = status
  5962.         0001h success
  5963.         0000h failure
  5964.         BL = error code (80h,81h,90h,91h,92h) (see #1494)
  5965. Note:    HIMEM.SYS will fail function 01h with error code 91h if AL=40h and
  5966.       DX=KB free extended memory returned by last call of function 08h
  5967. SeeAlso: #1471,#1503
  5968.  
  5969. (Table 1471)
  5970. Call the XMS driver "Release High Memory Area" function with:
  5971.     AH = 02h
  5972. Return: AX = status
  5973.         0001h success
  5974.         0000h failure
  5975.         BL = error code (80h,81h,90h,93h) (see #1494)
  5976. SeeAlso: #1470
  5977.  
  5978. (Table 1472)
  5979. Call the XMS driver "Global enable A20, for using the HMA" function with:
  5980.     AH = 03h
  5981. Return: AX = status
  5982.         0001h success
  5983.         0000h failure
  5984.         BL = error code (80h,81h,82h) (see #1494)
  5985. SeeAlso: #1473,#1474
  5986.  
  5987. (Table 1473)
  5988. Call the XMS driver "Global disable A20" function with:
  5989.     AH = 04h
  5990. Return: AX = status
  5991.         0001h success
  5992.         0000h failure
  5993.         BL = error code (80h,81h,82h,94h) (see #1494)
  5994. SeeAlso: #1472,#1475
  5995.  
  5996. (Table 1474)
  5997. Call the XMS driver "Local enable A20" function with:
  5998.     AH = 05h
  5999. Return: AX = status
  6000.         0001h success
  6001.         0000h failure
  6002.         BL = error code (80h,81h,82h) (see #1494)
  6003. Note:    this function is used for direct access to extended memory
  6004. SeeAlso: #1472,#1475
  6005.  
  6006. (Table 1475)
  6007. Call the XMS driver "Local disable A20" function with:
  6008.     AH = 06h
  6009. Return: AX = status
  6010.         0001h success
  6011.         0000h failure
  6012.         BL = error code (80h,81h,82h,94h) (see #1494)
  6013. SeeAlso: #1473,#1474
  6014.  
  6015. (Table 1476)
  6016. Call the XMS driver "Query A20 state" function with:
  6017.     AH = 07h
  6018. Return: AX = status
  6019.         0001h enabled
  6020.         0000h disabled
  6021.         BL = error code (00h,80h,81h) (see #1494)
  6022. SeeAlso: #1469,#1477
  6023.  
  6024. (Table 1477)
  6025. Call the XMS driver "Query free extended memory" function with:
  6026.     AH = 08h
  6027.     BL = 00h (some implementations leave BL unchanged on success)
  6028. Return: AX = size of largest extended memory block in KB
  6029.     DX = total extended memory in KB
  6030.     BL = error code (00h,80h,81h,A0h) (see #1494)
  6031. Note:    this function does not include the HMA in the returned memory sizes
  6032. SeeAlso: #1469,#1476,#1478,#1490
  6033.  
  6034. (Table 1478)
  6035. Call the XMS driver "Allocate extended memory block" function with:
  6036.     AH = 09h
  6037.     DX = Kbytes needed
  6038. Return: AX = status
  6039.         0001h success
  6040.         DX = handle for memory block
  6041.         0000h failure
  6042.         BL = error code (80h,81h,A0h) (see #1494)
  6043. SeeAlso: #1477,#1480,#1483,#1484,#1485,#1491
  6044.  
  6045. (Table 1479)
  6046. Call the XMS driver "Free extended memory block" function with:
  6047.     AH = 0Ah
  6048.     DX = handle of block to free
  6049. Return: AX = status
  6050.         0001h success
  6051.         0000h failure
  6052.         BL = error code (80h,81h,A2h,ABh) (see #1494)
  6053. SeeAlso: #1478,#1491
  6054.  
  6055. (Table 1480)
  6056. Call the XMS driver "Move extended memory block" function with:
  6057.     AH = 0Bh
  6058.     DS:SI -> EMM structure (see #1495)
  6059. Return: AX = status
  6060.         0001h success
  6061.         0000h failure
  6062.         BL = error code (80h-82h,A3h-A9h) (see #1494)
  6063. Note:    if either handle in the EMM structure is 0000h, the corresponding
  6064.       offset is considered to be an absolute segment:offset address in
  6065.       directly addressable memory
  6066. SeeAlso: #1478,#1481
  6067.  
  6068. (Table 1481)
  6069. Call the XMS driver "Lock extended memory block" function with:
  6070.     AH = 0Ch
  6071.     DX = handle of block to lock
  6072. Return: AX = status
  6073.         0001h success
  6074.         DX:BX = 32-bit linear address of locked block
  6075.         0000h failure
  6076.         BL = error code (80h,81h,A2h,ACh,ADh) (see #1494)
  6077. Note:    MS Windows 3.x rejects this function for handles allocated after
  6078.       Windows started
  6079. SeeAlso: #1478,#1480,#1482
  6080.  
  6081. (Table 1482)
  6082. Call the XMS driver "Unlock extended memory block" function with:
  6083.     AH = 0Dh
  6084.     DX = handle of block to unlock
  6085. Return: AX = status
  6086.         0001h success
  6087.         0000h failure
  6088.         BL = error code (80h,81h,A2h,AAh) (see #1494)
  6089. SeeAlso: #1481
  6090.  
  6091. (Table 1483)
  6092. Call the XMS driver "Get handle information" function with:
  6093.     AH = 0Eh
  6094.     DX = handle for which to get info
  6095. Return: AX = status
  6096.         0001h success
  6097.         BH = block's lock count
  6098.         BL = number of free handles left
  6099.         DX = block size in KB
  6100.         0000h failure
  6101.         BL = error code (80h,81h,A2h) (see #1494)
  6102. BUG:    MS Windows 3.10 acts as though unallocated handles are in use
  6103. Note:    MS Windows 3.00 has problems with this call
  6104. SeeAlso: #1469,#1478,#1492
  6105.  
  6106. (Table 1484)
  6107. Call the XMS driver "Reallocate extended memory block" function with:
  6108.     AH = 0Fh
  6109.     DX = handle of block
  6110.     BX = new size of block in KB
  6111. Return: AX = status
  6112.         0001h success
  6113.         0000h failure
  6114.         BL = error code (80h,81h,A0h-A2h,ABh) (see #1494)
  6115. SeeAlso: #1478,#1487
  6116.  
  6117. (Table 1485)
  6118. Call the XMS driver "Request upper memory block" function with:
  6119.     AH = 10h
  6120.     DX = size of block in paragraphs
  6121. Return: AX = status
  6122.         0001h success
  6123.         BX = segment address of UMB
  6124.         DX = actual size of block
  6125.         0000h failure
  6126.         BL = error code (80h,B0h,B1h) (see #1494)
  6127.         DX = largest available block
  6128. Notes:    Upper Memory consists of non-EMS memory between 640K and 1024K
  6129.     the XMS driver need not implement functions 10h through 12h to be
  6130.       considered compliant with the standard
  6131. SeeAlso: #1478,#1486,#1504
  6132.  
  6133. (Table 1486)
  6134. Call the XMS driver "Release upper memory block" function with:
  6135.     AH = 11h
  6136.     DX = segment address of UMB to release
  6137. Return: AX = status
  6138.         0001h success
  6139.         0000h failure
  6140.         BL = error code (80h,B2h) (see #1494)
  6141. Note:    the XMS driver need not implement functions 10h through 12h to be
  6142.       considered compliant with the standard
  6143. SeeAlso: #1479,#1485,#1487
  6144.  
  6145. (Table 1487)
  6146. Call the XMS v3.0+ driver "Reallocate upper memory block" function with:
  6147.     AH = 12h
  6148.     DX = segment address of UMB to resize
  6149.     BX = new size of block in paragraphs
  6150. Return: AX = status
  6151.         0001h success
  6152.         0000h failure
  6153.         BL = error code (80h,B0h,B2h) (see #1494)
  6154.         DX = maximum available size (RM386)
  6155. Note:    the XMS driver need not implement functions 10h through 12h to be
  6156.       considered compliant with the standard
  6157. SeeAlso: #1484,#1485,#1486,#1502
  6158.  
  6159. (Table 1488)
  6160. Call the QEMM v5.11 "???" function with:
  6161.     AH = 34h  (QEMM 5.11 only, undocumented)
  6162.     ???
  6163. Return: ???
  6164. SeeAlso: #1489
  6165.  
  6166. (Table 1489)
  6167. Call the QEMM v5.11 "???" function with:
  6168.     AH = 44h  (QEMM 5.11 only, undocumented)
  6169.     ???
  6170. Return: ???
  6171. SeeAlso: #1488,#1502
  6172.  
  6173. (Table 1490)
  6174. Call the XMS v3.0 driver "Query free extended memory" function with:
  6175.     AH = 88h
  6176. Return: EAX = largest block of extended memory, in KB
  6177.     BL = status (00h,80h,81h,A0h) (see #1494)
  6178.     ECX = physical address of highest byte of memory
  6179.         (valid even on error codes 81h and A0h)
  6180.     EDX = total Kbytes of extended memory (0 if status A0h)
  6181. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  6182.       are called
  6183. SeeAlso: #1477,#1491
  6184.  
  6185. (Table 1491)
  6186. Call the XMS v3.0 driver "Allocate any extended memory" function with:
  6187.     AH = 89h
  6188.     EDX = Kbytes needed
  6189. Return: AX = status
  6190.         0001h success
  6191.         DX = handle for allocated block (free with AH=0Ah) (see #1479)
  6192.         0000h failure
  6193.         BL = status (80h,81h,A0h,A1h,A2h) (see #1494)
  6194. SeeAlso: #1478,#1490
  6195.  
  6196. (Table 1492)
  6197. Call the XMS v3.0 driver "Get extended EMB handle information" function with:
  6198.     AH = 8Eh
  6199.     DX = handle
  6200. Return: AX = status
  6201.         0001h success
  6202.         BH = block's lock count
  6203.         CX = number of free handles left
  6204.         EDX = block size in KB
  6205.         0000h failure
  6206.         BL = status (80h,81h,A2h) (see #1494)
  6207. BUG:    MS-DOS 6.0 HIMEM.SYS leaves CX unchanged
  6208. SeeAlso: #1483,#1491,#1493
  6209.  
  6210. (Table 1493)
  6211. Call the XMS v3.0 driver "Reallocate any extended memory block" function with:
  6212.     AH = 8Fh
  6213.     DX = unlocked memory block handle
  6214.     EBX = new size in KB
  6215. Return: AX = status
  6216.         0001h success
  6217.         0000h failure
  6218.         BL = status (80h,81h,A0h-A2h,ABh) (see #1494)
  6219. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  6220.       are called
  6221. SeeAlso: #1484,#1492
  6222.  
  6223. (Table 1494)
  6224. Values for XMS error code returned in BL:
  6225.  00h    successful
  6226.  80h    function not implemented
  6227.  81h    Vdisk was detected
  6228.  82h    an A20 error occurred
  6229.  8Eh    a general driver error
  6230.  8Fh    unrecoverable driver error
  6231.  90h    HMA does not exist or is not managed by XMS provider
  6232.  91h    HMA is already in use
  6233.  92h    DX is less than the /HMAMIN= parameter
  6234.  93h    HMA is not allocated
  6235.  94h    A20 line still enabled
  6236.  A0h    all extended memory is allocated
  6237.  A1h    all available extended memory handles are allocated
  6238.  A2h    invalid handle
  6239.  A3h    source handle is invalid
  6240.  A4h    source offset is invalid
  6241.  A5h    destination handle is invalid
  6242.  A6h    destination offset is invalid
  6243.  A7h    length is invalid
  6244.  A8h    move has an invalid overlap
  6245.  A9h    parity error occurred
  6246.  AAh    block is not locked
  6247.  ABh    block is locked
  6248.  ACh    block lock count overflowed
  6249.  ADh    lock failed
  6250.  B0h    only a smaller UMB is available
  6251.  B1h    no UMB's are available
  6252.  B2h    UMB segment number is invalid
  6253.  
  6254. Format of EMM structure:
  6255. Offset    Size    Description    (Table 1495)
  6256.  00h    DWORD    number of bytes to move (must be even)
  6257.  04h    WORD    source handle
  6258.  06h    DWORD    offset into source block
  6259.  0Ah    WORD    destination handle
  6260.  0Ch    DWORD    offset into destination block
  6261. Notes:    if source and destination overlap, only forward moves (source base
  6262.       less than destination base) are guaranteed to work properly
  6263.     if either handle is zero, the corresponding offset is interpreted
  6264.       as a real-mode address referring to memory directly addressable
  6265.       by the processor
  6266.  
  6267. Format of XMS handle info [array]:
  6268. Offset    Size    Description    (Table 1496)
  6269.  00h    BYTE    handle
  6270.  01h    BYTE    lock count
  6271.  02h    DWORD    handle size
  6272.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  6273. SeeAlso: #1466
  6274. --------m-2F4310-----------------------------
  6275. INT 2F - Cloaking - REAL-MODE API
  6276.     AX = 4310h
  6277. Return: ES:BX -> driver entry point (see #1468,#1497,#1498,#1499,#1500)
  6278. SeeAlso: AX=4310h"XMS"
  6279.  
  6280. (Table 1497)
  6281. Call the Cloaking v1.01 "Client Registration" function with:
  6282.     AH = 7Eh
  6283.     BX = subfunction
  6284.         0000h get client registration count
  6285.         0001h get client registration structures
  6286.         ES:DI -> buffer for registration structures
  6287. Return: AX = status
  6288.         0000h failed
  6289.         0001h successful
  6290.         ---subfunction 00h---
  6291.         BX = size of client structure in bytes
  6292.         CX = number of clients installed
  6293.         ---subfunction 01h---
  6294.         ES:DI buffer filled
  6295. SeeAlso: #1498,#1500,INT 2C/AX=0033h
  6296.  
  6297. (Table 1498)
  6298. Call the Cloaking v1.01 "Verify Cloaking Host" function with:
  6299.     AH = 7Fh
  6300. Return: AX = status
  6301.         0000h failed
  6302.         0001h (successful) if installed
  6303.         BX = version (0101h for v1.01)
  6304.         CX = flags
  6305.             bit 0: host is VCPI-based
  6306.         DS:DX -> ASCIZ Cloaking host signature
  6307.             "CLOAKING.EXE"0, followed by a far-call entry point to
  6308.               uninstall host (see #1499) in Helix's CLOAKING.EXE
  6309. SeeAlso: #1497,#1500
  6310. Index:    installation check;Cloaking host|installation check;CLOAKING.EXE
  6311.  
  6312. (Table 1499)
  6313. Call the CLOAKING.EXE "Uninstall Host" function with:
  6314. Return:    AX = 4F4Bh ('OK') if successfully uninstalled protected-mode code
  6315.  
  6316. (Table 1500)
  6317. Call the Cloaking "Start Protected-Mode Client" function with:
  6318.     AH = 82h
  6319.     DX = XMS handle of locked block containing protected-mode code
  6320.     CL = code size (00h 16-bit, else 32-bit)
  6321.     ESI, EDI = parameters to pass to protected-mode code
  6322. Return: AX = status
  6323.         nonzero success
  6324.         0000h failed
  6325.         BL = error code (A2h,B0h) (see #1494)
  6326. Notes:    this function calls a user initialization function at offset 0 in
  6327.       the XMS memory block (see #1501)
  6328.     supported by Helix's RM386 v6.00 and Helix's CLOAKING.EXE
  6329. SeeAlso: #1497,#1498
  6330.  
  6331. (Table 1501)
  6332. Values user initialization function is called with:
  6333.     EBX = physical address of block's start
  6334.     ESI = user data from function 82h call
  6335.     EDI = user data from function 82h call
  6336.     CS = code selector for XMS block at EBX (16-bit or 32-bit)    
  6337.     DS = data selector for XMS block, starting at EBX
  6338.     ES = selector for V86 memory access to full real-mode 1088K
  6339.     GS = selector for full 4G flat address space
  6340.     SS:ESP -> stack provided by host
  6341. Return: via 32-bit FAR return
  6342. Note:    the initialization function may call any protected-mode Cloaking
  6343.       service; it should store the values of DS, ES, and GS for future
  6344.       reference
  6345. --------m-2F4310-----------------------------
  6346. INT 2F - Helix Netroom RM386 v6.00 - XMS EXTENSIONS
  6347.     AX = 4310h
  6348. Return: ES:BX -> driver entry point (see #1502,#1503,#1504,#1505)
  6349. Notes:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  6350.     HIMEM.SYS requires at least 256 bytes free stack space when calling
  6351.       the driver entry point
  6352. SeeAlso: AX=4300h,AX=4310h"XMS",AX=4310h"Cloaking"
  6353.  
  6354. (Table 1502)
  6355. Call the Netroom RM386 v6.00 "Reallocate upper memory block" function with:
  6356.     AH = 80h
  6357.     DX = segment address of UMB to resize
  6358.     BX = new size of block in paragraphs
  6359. Return: AX = status
  6360.         0001h success
  6361.         0000h failure
  6362.         BL = error code (80h,B0h,B2h) (see #1494)
  6363.         DX = maximum available size
  6364. Note:    this function is identical to function 12h
  6365. SeeAlso: #1487,#1503
  6366.  
  6367. (Table 1503)
  6368. Call the Netroom RM386 v6.00 "re-enable HMA allocation" function with:
  6369.     AH = 81h
  6370. Return: AX = 0001h (success)
  6371. SeeAlso: #1470,#1502,#1504
  6372.  
  6373. (Table 1504)
  6374. Call the Netroom RM386 v6.00 "Create new UMB entry" function with:
  6375.     AH = 83h
  6376.     BX = segment of high-memory block
  6377.     DX = first page of start of block
  6378.     CX = number of consecutive pages in block
  6379.     DI = start of UMB in block
  6380. Return: AX = 0001h (success)
  6381.     DI = segment of first high-DOS block
  6382. Note:    the new UMB is not linked into the high-memory chain
  6383. SeeAlso: #1485,#1503,#1505
  6384.  
  6385. (Table 1505)
  6386. Call the Netroom RM386 v6.00 "Get all XMS handles info" function with:
  6387.     AH = 84h
  6388.     CX = size of buffer for handle info
  6389.     ES:DI -> buffer for handle info (see #1496)
  6390. Return: AX = 0001h (success)
  6391.     DX = current number of allocated XMS handles
  6392. SeeAlso: #1504,#1490
  6393. --------m-2F4320-----------------------------
  6394. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  6395.     AX = 4320h
  6396.     ???
  6397. Return: ???
  6398. --------m-2F4330-----------------------------
  6399. INT 2F CU - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  6400.     AX = 4330h
  6401. Return: AL = 80h if external A20 handler provided
  6402.         ES:BX -> external A20 handler (see #1506)
  6403.         CL = A20 detection support
  6404.         00h handler is unable to report A20 state
  6405.         01h handler supports function 0002h to report A20 state
  6406. Note:    HIMEM.SYS calls this function to allow an external program to provide
  6407.       an A20 handler (i.e. to support a machine not supported by HIMEM
  6408.       itself)
  6409. SeeAlso: AX=4308h,AX=4310h
  6410.  
  6411. (Table 1506)
  6412. Call parameters for external A20 handler are:
  6413.     AX = function
  6414.         0000h disable A20
  6415.         0001h enable A20
  6416.         0002h get A20 state
  6417. Return: AX = status (functions 0000h and 0001h)
  6418.         0000h failure
  6419.         0001h successful
  6420.     AX = A20 state (function 0002h)
  6421.         0000h disabled
  6422.         0001h enabled
  6423. Note:    HIMEM.SYS only calls function 0002h if the returned CL indicated that
  6424.       the handler supports the call
  6425. --------E-2F43E0BX0000-----------------------
  6426. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - INSTALLATION CHECK
  6427.     AX = 43E0h
  6428.     BX = 0000h
  6429.     CX = 4450h ('DP')
  6430.     DX = 4D53h ('MS')
  6431. Return: AX = 0000h if installed
  6432.         CF clear
  6433.         ES:DI -> server structure (see #1507)
  6434.         ES:BX -> registration structure (pre-NWDOS 7 beta spec) (see #1509)
  6435. Note:    the DPMS 1.0 server included with the original release of Novell DOS
  6436.       7.0 supports both the beta and 1.0 specification, setting ES:BX even
  6437.       if CX and DX are not as specified on entry (since the beta
  6438.       specification did not use those registers).  However, the DPMS 1.1
  6439.       server included with the March 1994 update does not support the beta
  6440.       specification
  6441. SeeAlso: AX=43E1h,AX=43E2h,AX=43E3h,INT 2F/AX=1687h
  6442. Index:    signature strings;DPMS
  6443.  
  6444. Format of DPMS 1.0 server structure:
  6445. Offset    Size    Description    (Table 1507)
  6446.  00h  4 BYTEs    signature string "DPMS"
  6447.  04h  2 BYTEs    DPMS version (major,minor)
  6448.  06h  8 BYTEs    blank-padded server OEM name
  6449.  0Eh  2 BYTEs    OEM server version (major,minor)
  6450.  10h    WORD    DPMS flags (see #1508)
  6451.  12h    BYTE    CPU type
  6452.         (02h = 286, 03h = 386 or higher, higher values allowed)
  6453.  
  6454. Bitfields for DPMS flags:
  6455. Bit(s)    Description    (Table 1508)
  6456.  0    fast processor reset available (286 only)
  6457.  1    DPMS server is enabled
  6458.  2    memory is remapped
  6459.  3-15    reserved (undefined)
  6460.  
  6461. Format of beta DPMS registration structure:
  6462. Offset    Size    Description    (Table 1509)
  6463.  00h    DWORD    real-mode API entry point (see #1511)
  6464.  04h    DWORD    16-bit protected-mode API entry point (see #1511)
  6465.  08h  8 BYTEs    reserved (0)
  6466.  10h  8 BYTEs    blank-padded server OEM name
  6467.  18h    WORD    flags
  6468.         bit 0: fast processor reset available (286 only)
  6469.         bits 1-15 reserved (undefined)
  6470.  1Ah  2 BYTEs    DPMS version (major,minor)
  6471.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  6472. ----------2F43E1-----------------------------
  6473. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - REGISTER CLIENT
  6474.     AX = 43E1h
  6475.     CX = required protected-mode stack size in bytes
  6476.     ES:DI -> DPMS client interface structure (see #1510)
  6477. Return: AX = 0000h if supported
  6478.        CF clear
  6479.        ES:DI buffer filled with API entry point code from offset 0Ah
  6480. Note:    the client is allowed to copy the returned API code to any location in
  6481.       memory, and need not keep the three code fields together
  6482. SeeAlso: AX=43E0h,AX=43E2h,AX=43E3h
  6483.  
  6484. Format of DPMS client interface structure:
  6485. Offset    Size    Description    (Table 1510)
  6486.  00h    WORD    0000h (structure version / flags)
  6487.  02h  8 BYTEs    blank-padded client name
  6488.  0Ah  7 BYTEs    real/virtual-86 mode API code (see #1511)
  6489.  11h    BYTE    space for return instruction
  6490.         set to C3h for near return, CBh for far return
  6491.  12h  7 BYTEs    16-bit protected-mode API code (see #1511)
  6492.  19h    BYTE    space for return instruction
  6493.         set to C3h for near return, CBh for far return
  6494.  1Ah  9 BYTEs    32-bit protected-mode API code (see #1511)
  6495.  23h    BYTE    space for return instruction
  6496.         set to C3h for near return, CBh for far return
  6497. Note:    the DPMS server fills the return opcode bytes with zeros and DPMS
  6498.       requests will thus crash the system unless the application
  6499.       explicitly sets them (some early versions set them to C3h by
  6500.       default, but one should not rely on that)
  6501.  
  6502. (Table 1511)
  6503. Call DPMS entry point with:
  6504.     AX = 0000h unregister client from server
  6505.  ---control transfer functions---
  6506.     AX = 0100h call protected-mode procedure
  6507.         CX = number of words of stack to copy
  6508.         ES:(E)DI -> callup/down register structure (see #1513)
  6509.         Return: CF clear if successful
  6510.             CF set on error
  6511.                 AX = error code (see #1512)
  6512.     AX = 0101h call real-mode procedure (RETF return)
  6513.         CX = number of words of stack to copy
  6514.         ES:(E)DI -> callup/down register structure (see #1513)
  6515.         Return: CF clear if successful
  6516.             CF set on error
  6517.                 AX = error code (see #1512)
  6518.     AX = 0102h call real-mode procedure (IRET return)
  6519.         CX = number of words of stack to copy
  6520.         ES:(E)DI -> callup/down register structure (see #1513)
  6521.         Return: CF clear if successful
  6522.             CF set on error
  6523.                 AX = error code (see #1512)
  6524.     AX = 0103h call real-mode interrupt handler
  6525.         BL = interrupt number
  6526.         CX = number of words of stack to copy
  6527.         ES:(E)DI -> callup/down register structure (see #1513)
  6528.         Return: CF clear if successful
  6529.             CF set on error
  6530.                 AX = error code (see #1512)
  6531.     AX = 0104h register default protected mode procedure
  6532.         ES:(E)DI -> default register structure (see #1514)
  6533.         Return: CF clear if successful
  6534.             CF set on error
  6535.                 AX = error code (see #1512)
  6536.     AX = 0105h register default real-mode procedure (RETF return)
  6537.         ES:(E)DI -> default register structure (see #1514)
  6538.         Return: CF clear if successful
  6539.             CF set on error
  6540.                 AX = error code (see #1512)
  6541.         Note:    the procedure will be called from 16-bit prot. mode
  6542.     AX = 0106h register default real-mode procedure (IRET return)
  6543.         ES:(E)DI -> default register structure (see #1514)
  6544.         Return: CF clear if successful
  6545.             CF set on error
  6546.                 AX = error code (see #1512)
  6547.         Note:    the procedure will be called from 16-bit prot. mode
  6548.     AX = 0107h register default real-mode interrupt handler
  6549.         BL = interrupt number
  6550.         ES:(E)DI -> default register structure (see #1514)
  6551.         Return: CF clear if successful
  6552.             CF set on error
  6553.                 AX = error code (see #1512)
  6554.         Note:    the handler will be called from 16-bit protected mode
  6555.     AX = 0108h register default real-mode procedure (RETF return)
  6556.         ES:(E)DI -> default register structure (see #1514)
  6557.         Return: CF clear if successful
  6558.             CF set on error
  6559.                 AX = error code (see #1512)
  6560.         Note:    the procedure will be called from 32-bit prot. mode
  6561.     AX = 0109h register default real-mode procedure (IRET return)
  6562.         ES:(E)DI -> default register structure (see #1514)
  6563.         Return: CF clear if successful
  6564.             CF set on error
  6565.                 AX = error code (see #1512)
  6566.         Note:    the procedure will be called from 32-bit prot. mode
  6567.     AX = 010Ah register default real-mode interrupt handler
  6568.         BL = interrupt number
  6569.         ES:(E)DI -> default register structure (see #1514)
  6570.         Return: CF clear if successful
  6571.             CF set on error
  6572.                 AX = error code (see #1512)
  6573.         Note:    the handler will be called from 32-bit protected mode
  6574.  ---descriptor management---
  6575.     AX = 0200h allocate descriptors
  6576.         CX = number of descriptors to allocate
  6577.         Return: CF clear if successful
  6578.                 AX = selector for first descriptor allocated
  6579.             CF set on error
  6580.                 AX = error code (see #1512)
  6581.     AX = 0201h free a descriptor
  6582.         BX = selector for descriptor
  6583.         Return: CF clear if successful
  6584.             CF set on error
  6585.                 AX = error code (see #1512)
  6586.     AX = 0202h create alias descriptor
  6587.         BX = selector for descriptor to be aliased
  6588.         Return: CF clear if successful
  6589.                 AX = alias descriptor
  6590.             CF set on error
  6591.                 AX = error code (see #1512)
  6592.     AX = 0203h build alias to real-mode segment
  6593.         BX = descriptor
  6594.         CX = real-mode segment
  6595.         Return: CF clear if successful
  6596.             CF set on error
  6597.                 AX = error code (see #1512)
  6598.     AX = 0204h set descriptor base
  6599.         BX = descriptor
  6600.         CX:DX = base address
  6601.         Return: CF clear if successful
  6602.             CF set on error
  6603.                 AX = error code (see #1512)
  6604.     AX = 0205h set descriptor limit
  6605.         BX = descriptor
  6606.         CX = limit
  6607.         Return: CF clear if successful
  6608.             CF set on error
  6609.                 AX = error code (see #1512)
  6610.     AX = 0206h set descriptor type/attribute
  6611.         BX = descriptor
  6612.         CL = type
  6613.         CH = attribute
  6614.         Return: CF clear if successful
  6615.             CF set on error
  6616.                 AX = error code (see #1512)
  6617.     AX = 0207h get descriptor base
  6618.         BX = descriptor
  6619.         Return: CF clear if successful
  6620.                 CX:DX = base address
  6621.             CF set on error
  6622.                 AX = error code (see #1512)
  6623.  ---linear memory functions---
  6624.     AX = 0300h get size of largest free block of memory
  6625.         Return: CF clear if successful
  6626.                 BX:CX = size
  6627.             CF set on error
  6628.                 AX = error code (see #1512)
  6629.     AX = 0301h allocate block of extended memory
  6630.         BX:CX = required size
  6631.         Return: CF clear if successful
  6632.                 BX:CX = base address
  6633.                 SI:DI = handle
  6634.             CF set on error
  6635.                 AX = error code (see #1512)
  6636.     AX = 0302h free block of extended memory
  6637.         SI:DI = handle
  6638.         Return: CF clear if successful
  6639.             CF set on error
  6640.                 AX = error code (see #1512)
  6641.     AX = 0303h map linear memory
  6642.         ES:(E)DI -> DDS (see #1515)
  6643.         Return: CF clear if successful
  6644.                 BX:CX = base address
  6645.                 SI:DI = handle
  6646.             CF set on error
  6647.                 AX = error code (see #1512)
  6648.     AX = 0304h unmap linear memory
  6649.         SI:DI = handle
  6650.         Return: CF clear if successful
  6651.             CF set on error
  6652.                 AX = error code (see #1512)
  6653.     AX = 0305h get page table entries
  6654.         ESI = linear address
  6655.         (E)CX = count
  6656.         ES:(E)DI -> buffer for page table entries
  6657.         Return: CF clear if successful
  6658.                 ES:(E)DI buffer filled
  6659.             CF set on error
  6660.                 AX = error code (see #1512)
  6661.     AX = 0306h set page table entries
  6662.         EBX = linear memory handle
  6663.         ESI = linear address
  6664.         (E)CX = count
  6665.         ES:(E)DI -> buffer containing page table entries
  6666.         Return: CF clear if successful
  6667.             CF set on error
  6668.                 AX = error code (see #1512)
  6669.     AX = 0307h get largest mappable block size
  6670.         Return: CF clear if successful
  6671.                 BX:CX = size
  6672.             CF set on error
  6673.                 AX = error code (see #1512)
  6674.  ---miscellaneous---
  6675.     AX = 0400h relocate segment to extended memory
  6676.         ES:SI = base address
  6677.         CX = limit
  6678.         BL = type
  6679.         BH = attribute
  6680.         DX = selector or 0000h
  6681.         Return: CF clear if successful
  6682.                 AX = selector
  6683.                 BX:CX = new base address
  6684.                 SI:DI = handle
  6685.             CF set on error
  6686.                 AX = error code (see #1512)
  6687. Note:    the beta DPMS specification, which is still supported by the Novell
  6688.       DOS 7.0 DPMS host, only supported functions 0100h-0103h, 0200h-0207h,
  6689.       0300h-0304h, and 0400h
  6690.  
  6691. (Table 1512)
  6692. Values for DPMS error code:
  6693.  8000h    general error
  6694.  8001h    unsupported function
  6695.  8002h    unable to switch to protected mode
  6696.  8004h    no default stack defined
  6697.  8005h    unknown client
  6698.  8010h    resource unavailable
  6699.  8011h    descriptor unavailable
  6700.  8012h    linear memory unavailable
  6701.  8013h    physical memory unavailable
  6702.  8021h    invalid value
  6703.  8022h    invalid selector
  6704.  8023h    invalid handle
  6705.  8025h    invalid linear address
  6706.  
  6707. Format of DPMS callup/down register structure:
  6708. Offset    Size    Description    (Table 1513)
  6709.  00h    DWORD    EDI
  6710.  04h    DWORD    ESI
  6711.  08h    DWORD    EBP
  6712.  0Ch  4 BYTEs    reserved (0) (ESP, may be used by DPMS server)
  6713.  10h    DWORD    EBX
  6714.  14h    DWORD    EDX
  6715.  18h    DWORD    ECX
  6716.  20h    DWORD    EAX
  6717.  24h    DWORD    EIP
  6718.  28h    WORD    CS
  6719.  2Ah  2 BYTEs    reserved (0)
  6720.  2Ch    DWORD    EFLAGS
  6721.  30h    DWORD    ESP
  6722.  34h    WORD    SS
  6723.  36h  2 BYTEs    reserved (0)
  6724.  38h    WORD    ES
  6725.  3Ah  2 BYTEs    reserved (0)
  6726.  3Ch    WORD    DS
  6727.  3Eh  2 BYTEs    reserved (0)
  6728.  40h    WORD    FS
  6729.  42h  2 BYTEs    reserved (0)
  6730.  44h    WORD    GS
  6731.  46h  2 BYTEs    reserved (0)
  6732.  
  6733. Format of DPMS default register structure:
  6734. Offset    Size    Description    (Table 1514)
  6735.  00h    DWORD    EIP
  6736.  04h    WORD    CS
  6737.  06h  2 BYTEs    reserved (0)
  6738.  08h    WORD    number of words to copy from stack to stack
  6739.  0Ah    BYTE    (call) 00h
  6740.         (ret) nonzero if call could not be made
  6741.  0Bh    BYTE    reserved (may be used by some servers)
  6742.  0Ch    DWORD    ESP
  6743.  10h    WORD    SS
  6744.  12h  2 BYTEs    reserved (0)
  6745.  14h    WORD    ES
  6746.  16h  2 BYTEs    reserved (0)
  6747.  18h    WORD    DS
  6748.  1Ah  2 BYTEs    reserved (0)
  6749.  1Ch    WORD    FS
  6750.  1Eh  2 BYTEs    reserved (0)
  6751.  20h    WORD    GS
  6752.  22h  2 BYTEs    reserved (0)
  6753.  24h  9 BYTEs    API entry code (filled in by server)
  6754.  
  6755. Format of DPMS lock DDS:
  6756. Offset    Size    Description    (Table 1515)
  6757.  00h    DWORD    total size in bytes
  6758.  04h    DWORD    offset
  6759.  08h    WORD    segment or selector
  6760.  0Ah    WORD    reserved
  6761.  0Ch    WORD    maximum number of physical blocks structure has space for
  6762.  0Eh    WORD    number of physical blocks listed
  6763.  10h    DWORD    physical address of first block
  6764.  14h    DWORD    size in bytes of first block
  6765.     ...
  6766. ----------2F43E2-----------------------------
  6767. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - ENABLE/DISABLE DPMS
  6768.     AX = 43E2h
  6769.     BX = new state (0000h disable, 0001h enable)
  6770. Return: AX = 0000h if supported
  6771. Note:    this function should normally be called only by system software
  6772. SeeAlso: AX=43E0h,AX=43E1h,AX=43E3h
  6773. ----------2F43E3BX0000-----------------------
  6774. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS STARTUP BROADCAST
  6775.     AX = 43E3h
  6776.     BX = 0000h
  6777.     CX = 4450h ('DP')
  6778.     DX = 4D53h ('MS')
  6779. SeeAlso: AX=43E0h,AX=43E4h 
  6780. ----------2F43E4BX0000-----------------------
  6781. INT 2F - DOS Protected Mode Services (DPMS) v1.0 - DPMS EXIT BROADCAST
  6782.     AX = 43E4h
  6783.     BX = 0000h
  6784.     CX = 4450h ('DP')
  6785.     DX = 4D53h ('MS')
  6786. SeeAlso: AX=43E0h,AX=43E3h 
  6787. --------E-2F44-------------------------------
  6788. INT 2F U - DOS Extender support???
  6789.     AH = 44h
  6790.     AL = function (at least 0Bh, 15h, 17h)
  6791.     ???
  6792. Return: ???
  6793. Note:    called by Codeview for Windows
  6794. SeeAlso: AH=86h
  6795. --------G-2F4500-----------------------------
  6796. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  6797.     AX = 4500h
  6798. Return: AL = installation status
  6799.         01h if PROF.COM installed
  6800.         02h if VPROD.386 installed
  6801. SeeAlso: AX=4501h,AX=4502h
  6802. --------G-2F4501-----------------------------
  6803. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  6804.     AX = 4501h
  6805.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  6806.     CX = output limit in KB (second parameter for ProfSetup)
  6807. Note:    this call is not supported by PROF.COM
  6808. SeeAlso: AX=4502h,AX=4503h
  6809. --------G-2F4502-----------------------------
  6810. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  6811.     AX = 4502h
  6812.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  6813.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  6814.     CX = sampling rate for VPROD.386
  6815. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  6816.       low four bits of CMOS register 0Ah.  The interruption rate is
  6817.       1 SHL (15 - BL) per second.
  6818. SeeAlso: AX=4501h,AX=4503h
  6819. --------G-2F4503-----------------------------
  6820. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  6821.     AX = 4503h
  6822. Notes:    Profiling is also turned on by the key combinations
  6823.       LeftShift + RightShift + Alt and LeftShift + RightShift + Ctrl
  6824.     for PROF.COM, this call programs the CMOS clock by reading register
  6825.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  6826.       is unmasked
  6827. SeeAlso: AX=4504h
  6828. --------G-2F4504-----------------------------
  6829. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  6830.     AX = 4504h
  6831. Notes:    profiling is also turned off by the key combination
  6832.       LeftShift + RightShift
  6833.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  6834.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  6835. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  6836. --------G-2F4505-----------------------------
  6837. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  6838.     AX = 4505h
  6839. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  6840. --------G-2F4506-----------------------------
  6841. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  6842.     AX = 4506h
  6843. SeeAlso: AX=4505h,AX=4507h
  6844. --------G-2F4507-----------------------------
  6845. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  6846.     AX = 4507h
  6847. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  6848.       "ProfFlush" (AX=4506h)
  6849. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  6850. --------G-2F4508-----------------------------
  6851. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  6852.     AX = 4508h
  6853.     BX = ordinal (or 0000h)
  6854.     CX = segment
  6855.     DX = instance (or 0000h)
  6856.     SI = type (or 0000h)
  6857.     ES:DI -> ASCIZ module name
  6858. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  6859.       interface, but only to function 0, for notifying the profiler of
  6860.       each new segment loaded.  The SHOWHITS utility then examines the
  6861.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  6862.       with symbol files to provide information in a useful form.
  6863.     this call does not have a corresponding Windows function
  6864. SeeAlso: AX=4500h
  6865. --------D-2F4601-----------------------------
  6866. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6867.     AX = 4601h
  6868. Return: ???
  6869. Note:    the DOS 5+ kernel intercepts this function and copies the MCB
  6870.        following the caller's PSP memory block into the DOS data segment;
  6871.        in conjunction with AX=4602h, this intercept is used by DOS to
  6872.        avoid corruption of the Windows real-mode heap's end sentinel
  6873. SeeAlso: AX=1700h,AX=4602h
  6874. --------D-2F4602-----------------------------
  6875. INT 2F CU - MS Windows WINOLDAP - SWITCHING ???
  6876.     AX = 4602h
  6877. Return: ???
  6878. Note:    the DOS 5+ kernel intercepts this function and copies the
  6879.       previously-saved MCB from the DOS data segment into the MCB following
  6880.       the caller's PSP memory block; in conjunction with AX=4601h, this
  6881.       intercept is used by DOS to avoid corruption of the Windows real-mode
  6882.       heap's end sentinel
  6883. SeeAlso: AX=1700h,AX=4601h
  6884. --------E-2F46-------------------------------
  6885. INT 2F U - Windows/286 DOS Extender
  6886.     AH = 46h
  6887.     AL = subfunction (03h,04h)
  6888. Return: ???
  6889. Note:    these two subfunctions are called by MS Windows 3.0
  6890. --------v-2F4653CX0002-----------------------
  6891. INT 2F - F-PROT v1.x only - F-LOCK.EXE - API
  6892.     AX = 4653h
  6893.     CX = 0002h
  6894.     BX = subfunction
  6895.         0000h  installation check
  6896.         Return: AX = FFFFh
  6897.         0001h  uninstall
  6898.         Return: AX,BX,ES destroyed
  6899.         0002h  disable (v1.08 and below only)
  6900.         0003h  enable (v1.08 and below only)
  6901. Program: F-LOCK is part of the shareware F-PROT virus/trojan protection
  6902.       package by Fridrik Skulason
  6903. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6904. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6905. --------v-2F4653CX0003-----------------------
  6906. INT 2F - F-PROT v1.x only - F-XCHK.EXE - API
  6907.     AX = 4653h
  6908.     CX = 0003h
  6909.     BX = subfunction
  6910.         0000h  installation check
  6911.         Return: AX = FFFFh
  6912.         0001h  uninstall
  6913.         Return: AX,BX,ES destroyed
  6914. Program: F-XCHK is part of the shareware F-PROT virus/trojan protection
  6915.       package by Fridrik Skulason
  6916. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6917. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6918. --------v-2F4653CX0004-----------------------
  6919. INT 2F - F-PROT v1.x only - F-POPUP.EXE - API
  6920.     AX = 4653h
  6921.     CX = 0004h
  6922.     BX = subfunction
  6923.         0000h  installation check
  6924.         Return: AX = FFFFh
  6925.         0001h  uninstall
  6926.         Return: AX,BX,ES destroyed
  6927.         0002h  disable (v1.08 and below only)
  6928.            display message (v1.14+)
  6929.             other registers: ???
  6930.         0003h  enable (v1.08 and below only)
  6931.            display message (v1.14+)
  6932.             other registers: ???
  6933.             Return: AX = key pressed by user
  6934. Program: F-POPUP is part of the shareware F-PROT virus/trojan protection
  6935.       package by Fridrik Skulason
  6936. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6937. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6938. --------v-2F4653CX0005-----------------------
  6939. INT 2F - F-PROT v1.x only - F-DLOCK.EXE - API
  6940.     AX = 4653h
  6941.     CX = 0005h
  6942.     BX = subfunction
  6943.         0000h installation check
  6944.         Return: AX = FFFFh
  6945.         0001h uninstall
  6946.         Return: AX,BX,ES destroyed
  6947. Program: F-DLOCK is part of the shareware F-PROT virus/trojan protection
  6948.       package by Fridrik Skulason
  6949. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6950. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6951. --------W-2F4680-----------------------------
  6952. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6953.     AX = 4680h
  6954. Return: AX = result
  6955.         0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6956.           or DOS 5 DOSSHELL active
  6957.         nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6958.           mode
  6959. Note:    Windows 3.1 finally provides an installation check which works in all
  6960.       modes (see AX=160Ah)
  6961. SeeAlso: AX=1600h,AX=160Ah
  6962. ----------2F47-------------------------------
  6963. INT 2F U - ???
  6964.     AH = 47h
  6965.     ???
  6966. Return: ???
  6967. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6968. --------K-2F4800-----------------------------
  6969. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6970.     AX = 4800h
  6971. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6972.         ES = segment of DOSKEY resident portion
  6973. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6974. SeeAlso: AX=4800h"PCED",AX=4810h
  6975. --------K-2F4800-----------------------------
  6976. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6977.     AX = 4800h
  6978. Return: AX = AACDh if installed
  6979.         ES = segment of PCED kernel (PCED has multiple code segments)
  6980. Program: PCED v2.1 is a command line editor/history/macro facility by
  6981.       Cove Software.  It is the commercial version of the freeware CED.
  6982. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6983.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6984.       unsupported function code.  It IRETs with all registers intact.
  6985. --------K-2F4810-----------------------------
  6986. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6987.     AX = 4810h
  6988.     DS:DX -> line buffer (see #0573 at INT 21/AH=0Ah)
  6989. Return: AX = 0000h if successful
  6990. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6991.       the previous handler; PCED allows sizes other than 80h
  6992.     if the user's input is a macro name, no text is placed in the buffer
  6993.       even though AX=0000h on return; the program must immediately issue
  6994.       this call again to retrieve the expansion of the macro.  Similarly,
  6995.       if the user enters a special parameter such as $*, this call must
  6996.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6997.       overwrites the macro name on the screen with its expansion.
  6998.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6999.       not necessary to make two calls; since the buffer is not empty on
  7000.       return, DOSKEY-aware programs will not make the second call
  7001.     DOSKEY chains if AL is not 00h or 10h on entry
  7002. SeeAlso: AX=4800h,INT 21/AH=0Ah
  7003. --------K-2F48C0-----------------------------
  7004. INT 2F - PCED v2.1 - PCED API
  7005.     AX = 48C0h
  7006.     DX = API function code
  7007.     other registers as required by the specified function
  7008. Return: CF clear if successful
  7009.     CF set on error
  7010.         AX = PCED error code
  7011.     other registers as appropriate for API function
  7012. Program: PCED v2.1 is a command line editor/history/macro facility by
  7013.       Cove Software.  It is the commercial version of the freeware CED.
  7014. Note:    the full API information is available from Cove Software
  7015. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  7016. ----------2F48C1BL00-------------------------
  7017. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  7018.     AX = 48C1h
  7019.     BL = 00h
  7020. Return: AX = 0000h if installed
  7021.         BX = VSTACK resident segment
  7022. Program: VSTACK is a resident backscroll utility included as part of the PCED
  7023.       package by Cove Software
  7024. Note:    chains if BL <> 00h on entry
  7025. SeeAlso: AX=48C0h,AX=48C2h
  7026. ----------2F48C2BL00-------------------------
  7027. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  7028.     AX = 48C2h
  7029.     BL = 00h
  7030. Return: AX = 0000h if installed
  7031.         BX = ATTRIB resident segment
  7032. Program: ATTRIB is a resident file attribute changer included as part of the
  7033.       PCED package by Cove Software
  7034. Note:    chains if BL <> 00h on entry
  7035. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  7036. --------K-2F48C3BL00-------------------------
  7037. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  7038.     AX = 48C3h
  7039.     BL = 00h
  7040. Return: AX = 0000h if installed
  7041.         BX = KEYDEF resident segment
  7042. Program: KEYDEF is a resident keyboard redefinition utility included as part
  7043.       of the PCED package by Cove Software
  7044. Note:    chains if BL <> 00h on entry
  7045. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  7046. ----------2F48C4BL00-------------------------
  7047. INT 2F - PCED/FLIST - INSTALLATION CHECK
  7048.     AX = 48C4h
  7049.     BL = 00h
  7050. Return: AX = 0000h if installed
  7051.         BX = FLIST resident segment
  7052. Program: FLIST is a resident filelist processor included as part of the PCED
  7053.       package by Cove Software
  7054. Note:    chains if BL <> 00h on entry
  7055. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  7056. ----------2F48C5BL00-------------------------
  7057. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  7058.     AX = 48C5h
  7059.     BL = 00h
  7060. Return: AX = 0000h if installed
  7061.         BX = ASSOC resident segment
  7062. Program: ASSOC is a resident utility included as part of the PCED package which
  7063.       associated files with executable programs based on their extensions
  7064. Note:    chains if BL > 02h on entry
  7065. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  7066. ----------2F48C5BL01-------------------------
  7067. INT 2F - PCED/ASSOC - VERSION CHECK
  7068.     AX = 48C5h
  7069.     BL = 01h
  7070. Return: AX = 0000h if installed
  7071.         BX = binary ASSOC version (BL = major, BH = minor)
  7072. Note:    chains if BL > 02h on entry
  7073. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  7074. ----------2F48C5BL02-------------------------
  7075. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  7076.     AX = 48C5h
  7077.     BL = 02h
  7078.     DS:SI -> ASCIZ filename
  7079. Return: AX = status
  7080.         0000h if filename is unknown
  7081.         0001h if there is an association defined for the file
  7082.     BX destroyed
  7083. Program: ASSOC is a resident utility included as part of the PCED package which
  7084.       associated files with executable programs based on their extensions
  7085. Note:    chains if BL > 02h on entry
  7086. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  7087. ----------2F49-------------------------------
  7088. INT 2F U - ???
  7089.     AH = 49h
  7090.     ???
  7091. Return: ???
  7092. Note:    reportedly called by DOS 5.0 installation
  7093. --------D-2F4A00CX0000-----------------------
  7094. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  7095.     AX = 4A00h
  7096.     CX = 0000h
  7097.     DH = new drive number
  7098.     DL = current drive number
  7099. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  7100. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  7101.       "Insert diskette for drive X:" on single-floppy systems
  7102. --------D-2F4A01-----------------------------
  7103. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  7104.     AX = 4A01h
  7105. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  7106.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  7107. Note:    called by Windows 3.1 DOSX.EXE
  7108. SeeAlso: AX=4310h,AX=4A02h
  7109. --------D-2F4A02-----------------------------
  7110. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  7111.     AX = 4A02h
  7112.     BX = number of bytes
  7113. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  7114.     BX = number of bytes actually allocated (rounded up to next paragraph
  7115.           for DOS 5.0 and 6.0)
  7116. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  7117.     called by Windows 3.1 DOSX.EXE
  7118. SeeAlso: AX=4A01h
  7119. --------T-2F4A05-----------------------------
  7120. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  7121.     AX = 4A05h
  7122.     SI = function
  7123.         0000h reset???
  7124.         0001h ???
  7125.         ES:BP -> 80-byte buffer containing ???
  7126.         0002h ???
  7127.         0003h ???
  7128.         0004h ???
  7129.         BL = ???
  7130.         0005h ???
  7131.         0006h get ???
  7132.         Return: ES:SI -> ???
  7133.         0007h get ???
  7134.         Return: AX = ???
  7135.         0008h get ???
  7136.         Return: DX:AX -> ??? (internal control data of some kind)
  7137.         0009h get ???
  7138.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  7139.         000Ah ???
  7140.         BL = length of buffer
  7141.         ES:BP -> buffer containing ???
  7142.         000Bh get ???
  7143.         Return: AX = ???
  7144.         000Ch ???
  7145.         BL = ???
  7146.         Return: if BL nonzero on entry
  7147.                 DX:AX -> ???
  7148.             if BL = 00h on entry
  7149.                 ES:SI -> ???
  7150. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  7151.       listed above
  7152.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  7153.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  7154. SeeAlso: AX=4B01h
  7155. --------D-2F4A06-----------------------------
  7156. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  7157.     AX = 4A06h
  7158.     DX = segment following last byte of conventional memory
  7159. Return: DX = segment following last byte of memory available for use by DOS
  7160. Desc:    used to override the default memory size when booting diskless
  7161.       workstations
  7162. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  7163.       present three bytes beyond the INT 2F handler; this call overrides
  7164.       the value returned by INT 12
  7165.     hooked by RPL code at the top of memory to protect itself from being
  7166.       overwritten; DOS builds a memory block with owner = 0008h and name
  7167.       "RPL" which must be freed by the RPL code when it is done
  7168. SeeAlso: INT 12,INT 18
  7169. --------N-2F4A07-----------------------------
  7170. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  7171.     AX = 4A07h
  7172.     ???
  7173. Return: ???
  7174. --------c-2F4A10BX0000-----------------------
  7175. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  7176.     AX = 4A10h
  7177.     BX = 0000h
  7178.     CX = EBABh (v4.1+; see Note)
  7179. Return: AX = BABEh if installed
  7180.         DX:BX = cache hits
  7181.         DI:SI = cache misses
  7182.         CX = number of dirty cache elements
  7183.         BP = version in BCD (4.10 = 0410h)
  7184. Notes:    most of the SMARTDRV API, including this call, is supported by
  7185.       PC-Cache v8.0 and recent versions of the Norton Caches
  7186.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  7187.       then calls of this function with CX<>EBABh on entry cause
  7188.       DBLSPACE.BIN to display the error message
  7189.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and abort the caller
  7190.       with INT 21/AX=4C00h
  7191.     SMARTDRV v3.x had a completely different API using IOCTL calls, which
  7192.       was also supported by the Norton Caches
  7193. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  7194. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  7195. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  7196. ----------2F4A10BX0000-----------------------
  7197. INT 2F U - Novell NWCACHE - ???
  7198.     AX = 4A10h
  7199.     BX = 0000h
  7200.     CX = 0EDCh
  7201. Return: ???
  7202. SeeAlso: AX=4A10h/BX=0001h"NWCACHE"
  7203. --------c-2F4A10BX0001-----------------------
  7204. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS (COMMIT CACHE)
  7205.     AX = 4A10h
  7206.     BX = 0001h
  7207. Note:    this function is also supported by PC-Cache v8.0.
  7208. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  7209. ----------2F4A10BX0001-----------------------
  7210. INT 2F U - Novell NWCACHE - ???
  7211.     AX = 4A10h
  7212.     BX = 0001h
  7213.     CX = 0EDCh
  7214. Return: ???
  7215. SeeAlso: AX=4A10h/BX=0000h"NWCACHE"
  7216. --------c-2F4A10BX0002-----------------------
  7217. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  7218.     AX = 4A10h
  7219.     BX = 0002h
  7220. Note:    this function is also supported by PC-Cache v8.0.
  7221. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  7222. --------c-2F4A10BX0003-----------------------
  7223. INT 2F - SMARTDRV v4.00+ - STATUS
  7224.     AX = 4A10h
  7225.     BX = 0003h
  7226.     BP = drive number (0=A, 1=B, etc.)
  7227.     DL = subfunction
  7228.         00h only get information
  7229.         01h turn on read cache
  7230.         02h turn off read cache
  7231.         03h turn on write cache
  7232.         04h turn off write cache
  7233. Return: AX = BABEh if OK
  7234.     DL = status (see #1516)
  7235.     DL = FFh if drive does not exist
  7236. Notes:    If the read cache is off, reads will not be cached, but writes will
  7237.       continue to be cached if the write-cache is enabled.
  7238.     this function is also supported by PC-Cache v8.0.
  7239. SeeAlso: AX=4A10h/BX=0000h
  7240.  
  7241. Bitfields for SMARTDRV status:
  7242. Bit(s)    Description    (Table 1516)
  7243.  7    not cached
  7244.  6    write-through (not write-cached)
  7245.  0-5    real drive number (0=A, 1=B...)
  7246. --------c-2F4A10BX0004-----------------------
  7247. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  7248.     AX = 4A10h
  7249.     BX = 0004h
  7250. Return: AX = size in elements of full-sized cache
  7251.     BX = current size in elements
  7252.     CX = size of one element in bytes
  7253.     DX = number of elements under Windows
  7254. Note:    this function is also supported by PC-Cache v8.0.
  7255. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  7256. --------c-2F4A10BX0005-----------------------
  7257. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  7258.     AX = 4A10h
  7259.     BX = 0005h
  7260.     BP = drive number (0=A, 1=B...)
  7261. Return: AX = BABEh if double-buffered
  7262.         ES:DI -> 16-byte array of status bytes for fixed disks (see #1517)
  7263. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  7264.  
  7265. (Table 1517)
  7266. Values for SMARTDRV status byte:
  7267.  00h    state unknown
  7268.  FFh    drive double-buffered
  7269.  else    not double-buffered
  7270. --------c-2F4A10BX0006-----------------------
  7271. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  7272.     AX = 4A10h
  7273.     BX = 0006h
  7274.     CL = drive number (01h = A:)
  7275. Return: AX = 0006h if drive should not be cached by SMARTDRV
  7276. Note:    called by SMARTDRV at startup to determine whether it should cache
  7277.       a particular drive
  7278. SeeAlso: AX=4A10h/BX=0000h
  7279. --------c-2F4A10BX0007-----------------------
  7280. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  7281.     AX = 4A10h
  7282.     BX = 0007h
  7283.     BP = drive number (00h=A:)
  7284. Return: DL = unit number within device driver
  7285.     ES:DI -> device driver header for drive
  7286. Note:    this function is also supported by PC-Cache v8.0.
  7287.     this call is reported to always return the driver header of the
  7288.       standard block driver (A:-C:+) for SmartDrive v5.00 from MS-DOS 6.2
  7289. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  7290. --------c-2F4A10BX0008-----------------------
  7291. INT 2F - SMARTDRV v4.20+ - GET/SET FLUSH BEFORE PROMPT, CD-ROM SUPPORT
  7292.     AX = 4A10h
  7293.     BX = 0008h
  7294.     DL = subfunction
  7295.         00h set
  7296.         DH = new states
  7297.             bit 0: flush before prompt
  7298.             bits 1-7 reserved (0)
  7299.         01h get
  7300.         Return: DH = status flags
  7301.                 bit 0: (v4.2+) flush before prompt
  7302.                 bit 1: (v5.0+) CD-ROM caching support installed
  7303. Note:    v4.2 was an interim release to fix problems in the SMARTDRV included
  7304.       with MS-DOS 6.00; v5.00 is included with MS-DOS 6.2
  7305. --------c-2F4A10BX000A-----------------------
  7306. INT 2F - SMARTDRV v4.00+ - GET ELEMENT STATUS TABLE
  7307.     AX = 4A10h
  7308.     BX = 000Ah
  7309. Return: ES:BX -> information pointer table (see #1518)
  7310. Note:    this function is also supported by PC-Cache v8.0.
  7311. SeeAlso: AX=4A10h/BX=0000h
  7312.  
  7313. Format of SMARTDRV information pointer table:
  7314. Offset    Size    Description    (Table 1518)
  7315.  00h    WORD    offset of ??? byte/word array (byte if elements < 2000h bytes)
  7316.  02h    WORD    offset of dirty flag byte/word array (byte if elts < 2000h)
  7317.         each byte/word is a bit string of the dirty sectors in element
  7318.  04h    WORD    offset of word array containing low halves of unique
  7319.           identifiers for the corresponding element's contents
  7320.  06h    WORD    offset of word array containing high halves of unique
  7321.           identifiers for the corresponding element's contents
  7322.  08h    WORD    offset of WORD containing current number of elements in cache
  7323. --------c-2F4A10BX1234-----------------------
  7324. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  7325.     AX = 4A10h
  7326.     BX = 1234h
  7327. Desc:    this function pops up a message box saying that a serious error
  7328.       occurred and to hit R to retry, then waits for the keypress
  7329. Note:    this function is also supported by PC-Cache v8.0.
  7330. SeeAlso: AX=4A10h/BX=0000h
  7331. --------k-2F4A11BX0000-----------------------
  7332. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  7333.     AX = 4A11h
  7334.     BX = 0000h
  7335. Return: AX = 0000h (successful)
  7336.     BX = 444Dh ("DM")
  7337.     CL = first drive letter used by DBLSPACE (41h ['A'] = A:)
  7338.     CH = number of drive letters used by DBLSPACE
  7339.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  7340.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  7341.           position in memory (i.e. DBLSPACE.SYS /MOVE)
  7342. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  7343.       disk-compression software bundled with MS-DOS 6.0 and 6.20
  7344. Notes:    this function is also supported by the version of SuperStor bundled
  7345.       with IBM DOS 6.x and "preloading" versions of Stacker
  7346.     the complete DBLSPACE.BIN API is still supported by MS-DOS 6.22's
  7347.       DRVSPACE.BIN
  7348. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  7349. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  7350. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  7351. --------k-2F4A11BX0001-----------------------
  7352. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  7353.     AX = 4A11h
  7354.     BX = 0001h
  7355.     DL = drive number (0=A:)
  7356. Return: AX = status (see also #1519)
  7357.         0000h successful
  7358.         if DL was compressed drive,
  7359.             BL = host drive (bit 7 set if drive is compressed)
  7360.         else if DL was host drive,
  7361.             BL = compressed drive
  7362.         else
  7363.             BL = specified drive (if available for DoubleSpace)
  7364.         BH = DoubleSpace sequence number
  7365.         other error code (0101h) (see #1519)
  7366.         apparently never returned for the MS-DOS 6.2 DoubleSpace
  7367. Note:    the compressed volume file for the specified compressed drive is
  7368.       host:\DBLSPACE.sequence
  7369. SeeAlso: AX=4A11h/BX=0000h
  7370.  
  7371. (Table 1519)
  7372. Values for DBLSPACE function status:
  7373.  0000h    successful
  7374.  0100h    bad function
  7375.  0101h    invalid drive
  7376.  0102h    not a compressed drive
  7377.  0103h    drive already swapped
  7378.  0104h    drive not swapped
  7379. --------k-2F4A11BX0002-----------------------
  7380. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  7381.     AX = 4A11h
  7382.     BX = 0002h
  7383.     DL = drive number (0=A:) of compressed drive to swap with its host
  7384. Return: AX = status (0000h,0101h,0102h,0103h) (see #1519)
  7385. Note:    this function is intended for use by DBLSPACE.EXE only
  7386. SeeAlso: AX=4A11h/BX=0000h
  7387. --------k-2F4A11BX0003-----------------------
  7388. INT 2F - DBLSPACE.BIN - "DSGetEntryPoints" - GET DEVICE DRIVER ENTRY POINTS
  7389.     AX = 4A11h
  7390.     BX = 0003h
  7391.     CL = drive number (0=A:) of compressed drive
  7392. Return: CL = FFh on error (not compressed drive)
  7393.     CL <> FFh driver unit number of host drive
  7394.         ES:SI -> device driver's strategy routine
  7395.         ES:DI -> device driver's interrupt routine
  7396.     BX destroyed
  7397. Note:    in conjunction with subfunction 0004h, this call allows disk caches
  7398.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  7399.       drives just like SMARTDRV applies to regular block devices
  7400. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  7401. --------k-2F4A11BX0004-----------------------
  7402. INT 2F - DBLSPACE.BIN - "DSSetEntryPoints" - SET DEVICE DRIVER ENTRY POINTS
  7403.     AX = 4A11h
  7404.     BX = 0004h
  7405.     CL = drive number (0=A:) of compressed drive
  7406.     DL = unit number for new driver entry points
  7407.     DH = 00h
  7408.     ES:SI -> device driver strategy routine to call for drive
  7409.     ES:DI -> device driver interrupt routine to call for drive
  7410. Return: CL = FFh on error (not a compressed drive)
  7411.     BX destroyed
  7412. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  7413.       disk-compression software bundled with MS-DOS 6.0
  7414. Note:    in conjunction with subfunction 0003h, this call allows disk caches
  7415.       like SMARTDRV to apply a device driver wrapper to DoubleSpaced
  7416.       drives just like SMARTDRV applies to regular block devices
  7417. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  7418. --------k-2F4A11BX0005-----------------------
  7419. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  7420.     AX = 4A11h
  7421.     BX = 0005h
  7422.     DL = drive number (0=A:) to assign to new drive
  7423.     ES:SI -> activation record (see #1520)
  7424. Return: status returned in activation record (see #1521)
  7425. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  7426.  
  7427. Format of DBLSPACE activation record:
  7428. Offset    Size    Description    (Table 1520)
  7429.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  7430.  02h    BYTE    4Dh ('M') mount command
  7431.  03h    BYTE    error code (set to FFh before calling) (see #1521)
  7432.  04h    BYTE    host drive number (0=A:)
  7433.  05h    ???    DISK_UNIT structure (not documented)
  7434.  
  7435. (Table 1521)
  7436. Values for DBLSPACE Mount error code:
  7437.  00h    successful
  7438.  01h    drive letter not available for DoubleSpace
  7439.  02h    drive letter already in use
  7440.  03h    no more disk units (increase MaxRemovableDrives in .INI)
  7441.  09h    CVF too fragmented
  7442. --------k-2F4A11BX0006-----------------------
  7443. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  7444.     AX = 4A11h
  7445.     BX = 0006h
  7446.     DL = drive number (0=A:) to unmount
  7447. Return: AX = status (0000h,0102h) (see #1519)
  7448. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  7449. --------k-2F4A11BX0007-----------------------
  7450. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  7451.     AX = 4A11h
  7452.     BX = 0007h
  7453.     DL = compressed drive number (0=A:)
  7454. Return: AX = status (0000h,0102h) (see also #1519)
  7455.         0000h successful
  7456.         DS:SI -> free space record (see #1522)
  7457. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  7458.       disk-compression software bundled with MS-DOS 6.0
  7459. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  7460.  
  7461. Format of DBLSPACE free space record:
  7462. Offset    Size    Description    (Table 1522)
  7463.  00h    DWORD    total number of sectors in drive's sector heap
  7464.  04h    DWORD    number of free sectors in drive's sector heap
  7465. --------k-2F4A11BX0008-----------------------
  7466. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  7467.     AX = 4A11h
  7468.     BX = 0008h
  7469.     DL = compressed drive number (0=A:)
  7470. Return: AX = status (0000h,0102h) (see also #1519)
  7471.         0000h successful
  7472.         BX = maximum entries in File Fragment heap
  7473.         CX = available entries in File Fragment heap
  7474. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  7475. --------k-2F4A11BX0009-----------------------
  7476. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  7477.     AX = 4A11h
  7478.     BX = 0009h
  7479.     DL = compressed drive number (0=A:)
  7480. Return: AX = status (see also #1519)
  7481.         0000h successful
  7482.         CL = number of DISK_UNIT structures allocated
  7483.               (see AX=4A11h/BX=0005h)
  7484.         CH = DoubleGuard enabled-checks bitflags in bits 6-0 (DOS 6.2)
  7485. Note:    the DoubleGuard checks are enabled or disabled as a block by the
  7486.       DoubleGuard= line in DBLSPACE.INI; they may be individually set with
  7487.       the CheckSum= line.
  7488. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  7489. --------k-2F4A11BX000A-----------------------
  7490. INT 2F - DBLSPACE.BIN v6.2 - SET AUTOMOUNT DRIVES
  7491.     AX = 4A11h
  7492.     BX = 000Ah
  7493.     CX:DX = bitmask of drives on which to enable AutoMount
  7494.         (DX bit 0 = A:, CX bit 0 = P:, etc.)
  7495. Return: AX = 0000h if supported
  7496.         CX:DX = old mask or 0000h:0000h on error
  7497.     BX destroyed
  7498. SeeAlso: AX=4A11h/BX=000Bh
  7499. --------k-2F4A11BX000B-----------------------
  7500. INT 2F - DBLSPACE.BIN v6.2 - GET AUTOMOUNT DRIVES
  7501.     AX = 4A11h
  7502.     BX = 000Bh
  7503. Return: AX = 0000h if supported
  7504.         CX:DX = mask of drives with AutoMount enabled
  7505.         0000h:0000h on error
  7506.     BX destroyed
  7507. SeeAlso: AX=4A11h/BX=000Ah
  7508. --------k-2F4A11BXFFFE-----------------------
  7509. INT 2F U - DBLSPACE.BIN - RELOCATE
  7510.     AX = 4A11h
  7511.     BX = FFFEh
  7512.     ES = segment to which to relocate DBLSPACE.BIN
  7513. Return: ???
  7514. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  7515.       in memory
  7516.     this function also unhooks and discards the code providing this
  7517.       function and AX=4A11h/BX=FFFFh
  7518.     this function is also supported by the version of SuperStor bundled
  7519.       with IBM DOS 6.x and "preloading" versions of Stacker
  7520. SeeAlso: AX=4A11h/BX=FFFFh
  7521. --------k-2F4A11BXFFFF-----------------------
  7522. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  7523.     AX = 4A11h
  7524.     BX = FFFFh
  7525. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  7526. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  7527.       position in memory
  7528.     this function is also supported by the version of SuperStor bundled
  7529.       with IBM DOS 6.x and "preloading" versions of Stacker
  7530. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  7531. --------k-2F4A12CX4D52-----------------------
  7532. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  7533.     AX = 4A12h
  7534.     CX = 4D52h ("MR")
  7535.     DX = 4349h ("CI")
  7536. Return: CX = 4943h ("IC") if installed
  7537.     DX = 524Dh ("RM") if installed
  7538.         ES:DI -> MRCINFO structure (see #0544 at INT 1A/AX=B001h)
  7539. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  7540.       called first, as the latter call is used for the first, ROM-based
  7541.       MRCI server, while this call is used for RAM-based servers which
  7542.       may be partially or entirely replacing a prior server
  7543. SeeAlso: AX=4A12h/CX=5354h,INT 1A/AX=B001h
  7544. --------k-2F4A12CX5354-----------------------
  7545. INT 2F - Stacker 4 LZS Compression Interface (LZSAPI)
  7546.     AX = 4A12h
  7547.     CX = 5354h ("ST")
  7548.     DX = 4143h ("AC")
  7549. Return: AX = 4F4Bh ("OK") if installed
  7550.     CX = 7374h ("st") if installed
  7551.     DX = 6163h ("ac") if installed
  7552.         ES:DI -> entry point in LZSAPI server (usually, driver
  7553.               STACKER.COM) containing far address of an actual
  7554.               LZSINFO structure (see #1523)
  7555. SeeAlso: AX=4A12h/CX=4D52h,INT 25/AX=CDCDh
  7556.  
  7557. Format of LZSINFO structure:
  7558. Offset    Size    Description    (Table 1523)
  7559.  00h  6 BYTEs    signature "LZSAPI"
  7560.  06h    WORD    server version (200 (0C8h) for Stacker 4 and Stacker Anywhere)
  7561.  08h  4 BYTEs    vendor signature
  7562.         "STAC" = Stac Electronics, Inc.
  7563.  0Ch  6 BYTEs    ???
  7564.  12h    WORD    bit flags: server status/capabilities (see #1524)
  7565.  14h    DWORD    -> Stacker 3.X-compatible compression procedure
  7566.  18h    DWORD    -> Stacker 3.X-compatible decompression procedure
  7567.  1Ch  4 BYTEs    reserved (always set to 0)
  7568.  20h    DWORD    -> incremental Stacker 3.x-compatible compression procedure
  7569.           (see #1525)
  7570.  24h  4 BYTEs    ???
  7571.  28h    DWORD    -> incremental Stacker 3.x-compatible decompression procedure
  7572.           (see #1526)
  7573.  2Ch  4    BYTES    ???
  7574.  30h    DWORD    -> new (Stacker 4) compression procedure
  7575.  34h  4 BYTEs    ???
  7576.  38h    DWORD    -> new (Stacker 4) decompression procedure
  7577. Notes:    Stacker 4 usally keeps two different data-compression algorithms in
  7578.       memory (preferably in XMA):
  7579.         1) new (Stacker 4) data compression algorithm (4K LZ77 with hashing
  7580.           and static Huffman encoding), and
  7581.         2) old (Stacker 3.x-compatible) one (2K LZ77 with hashing), which
  7582.           is used to work with STACVOL files created under older
  7583.           versions of Stacker.
  7584.  
  7585. Bitfields for LZSAPI capabilities:
  7586. Bit(s)    Description    (Table 1524)
  7587.  0    ???
  7588.  1    busy/error flag
  7589.  2-10    ???
  7590.  11    maximum compressor/decompressor presented
  7591.  
  7592. (Table 1525)
  7593. Call Stacker 3.x-style non-incremental functions with:
  7594.     STACK:    DWORD    return address for compress/decompress procedure
  7595.         WORD    compression algorithm parameters (see #1527)
  7596.         WORD    size of destination buffer (in bytes)
  7597.         DWORD    address of destination buffer
  7598.         WORD    size of source buffer (in bytes)
  7599.         DWORD    address of source buffer
  7600. Return: (compression/decompression procedure)
  7601.     AX = size of resulting data in destination buffer
  7602.         0000h if error (either destination buffer too small or error in
  7603.           compressed data)
  7604.  
  7605. (Table 1526)
  7606. Call Stacker 4-style incremental procedures with:
  7607.     STACK:    DWORD    return address for compr./decompr. procedure
  7608.         DWORD    address of LZSSWAP structure (see #1528)
  7609.             if 0000:0000, procedure uses non-incremental technique
  7610.         WORD    compression algorithm parameters (see #1527)
  7611.         WORD    size of destination buffer (in bytes)
  7612.         DWORD    address of destination buffer
  7613.         WORD    size of source buffer (in bytes)
  7614.         DWORD    address of source buffer
  7615.  
  7616. (Table 1527)
  7617. Values for Compression algorithm parameters:
  7618. Value    Compression level (/P=xx parameter)
  7619.  07F9h      1
  7620.  0621h      2
  7621.  0625h      3
  7622.  0665h      4
  7623.  0669h      5
  7624.  06E9h      6
  7625.  06EDh      7
  7626.  07D1h      8
  7627.  07D9h      9
  7628.  
  7629. Format of LZSSWAP structure:
  7630. Offset    Size    Description    (Table 1528)
  7631.  00h  2 BYTEs    signature "CS"
  7632.  02h  6 BYTEs    reserved
  7633.  08h    DWORD    address of destination buffer swapping procedure
  7634.  0Ch    DWORD    address of stack swapping procedure
  7635. --------k-2F4A13-----------------------------
  7636. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  7637.     AX = 4A13h
  7638. Return: AX = 134Ah if supported
  7639.         ES:BX -> entry point record (see #1529)
  7640. SeeAlso: AX=4A11h/BX=0000h
  7641.  
  7642. Format of DBLSPACE entry point record:
  7643. Offset    Size    Description    (Table 1529)
  7644.  00h    DWORD    pointer to FAR function for ???
  7645.  04h  5 BYTEs    FAR JUMP instruction to ???
  7646. --------N-2F4B-------------------------------
  7647. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  7648.     AH = 4Bh
  7649.     ???
  7650. Return: ???
  7651. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  7652.       file/printer services
  7653. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  7654. --------T-2F4B01-----------------------------
  7655. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  7656.     AX = 4B01h
  7657.     CX:DX -> task switcher entry point (see #1532)
  7658.     ES:BX = 0000h:0000h
  7659. Return: ES:BX -> callback info structure (see #1530) or 0000h:0000h
  7660. Notes:    called by the task switcher
  7661.     this function is hooked by clients which require notification of task
  7662.       switcher activities; the call must first be passed on to the prior
  7663.       handler with registers unchanged using a simulated interrupt.     On
  7664.       return, the client must build a callback info structure and store
  7665.       the returned ES:BX in the "next" field, then return the address of
  7666.       its own callback info structure.
  7667.     a client program must add itself to the notification chain if it
  7668.       provides services to other programs; before terminating, it must
  7669.       remove itself from the chain by calling the task switcher's entry
  7670.       point with AX=0005h (see #1532)
  7671.     the task switcher entry point should not be saved, as it is subject to
  7672.       change and will be provided on any notification call
  7673.     the Windows 3.1 Standard Mode supports this API
  7674. SeeAlso: AX=160Bh,AX=4B02h
  7675.  
  7676. Format of task switcher callback info structure:
  7677. Offset    Size    Description    (Table 1530)
  7678.  00h    DWORD    pointer to next callback info structure
  7679.  04h    DWORD    pointer to notification function (see #1531)
  7680.  08h    DWORD    reserved
  7681.  0Ch    DWORD    address of zero-terminated list of API info structures
  7682.         (see #1534)
  7683.  
  7684. (Table 1531)
  7685. Values task switcher notification function is called with:
  7686.     AX = function
  7687.         0000h switcher initialization
  7688.         Return: AX = status
  7689.                 0000h if OK to load
  7690.                 nonzero to abort task switcher
  7691.         0001h query suspend
  7692.         BX = session ID
  7693.         Return: AX = status
  7694.                 0000h if OK to switch session
  7695.                 0001h if not
  7696.         0002h suspend session
  7697.         BX = session ID
  7698.         interrupts disabled
  7699.         Return: AX = 0000h if OK to switch session
  7700.                = 0001h if not
  7701.         0003h activate session
  7702.         BX = session ID
  7703.         CX = session status flags
  7704.             bit 0: set if first activation of session
  7705.             bits 1-15: reserved (0)
  7706.         interrupts disabled
  7707.         Return: AX = 0000h
  7708.         0004h session active
  7709.         BX = session ID
  7710.         CX = session status flags
  7711.             bit 0: set if first activation of session
  7712.             bits 1-15: reserved (0)
  7713.         Return: AX = 0000h
  7714.         0005h create session
  7715.         BX = session ID
  7716.         Return: AX = 0000h if OK to create session
  7717.                = 0001h if not
  7718.         0006h destroy session
  7719.         BX = session ID
  7720.         Return: AX = 0000h
  7721.         0007h switcher termination
  7722.         BX = flags
  7723.             bit 0: set if calling switcher is only switcher loaded
  7724.             bits 1-15: reserved (0)
  7725.         Return: AX = 0000h
  7726.     ES:DI -> task switcher entry point (see #1532)
  7727. Notes:    function 0000h is generally called by the program which controls or
  7728.       invokes the task switcher, rather than by the task switcher itself;
  7729.       the entry point supplied to this function is not necessarily the
  7730.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  7731.       any client indicates that loading is not possible, all clients will
  7732.       be called with function 0007h; thus it is possible for a client to
  7733.       receive a termination notice without a corresponding initialization
  7734.       notice.
  7735.     except for functions 0002h and 0003h, the notification handler is
  7736.       called with interrupts enabled and may make any INT 21h function
  7737.       call; interrupts must not be enabled in functions 0002h and 0003h
  7738.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  7739.       point is no longer valid
  7740. --------T-2F4B02BX0000-----------------------
  7741. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  7742.     AX = 4B02h
  7743.     BX = 0000h
  7744.     ES:DI = 0000h:0000h
  7745. Return: ES:DI = 0000h:0000h if task switcher not loaded
  7746.     ES:DI -> task switcher entry point (see #1532) if loaded
  7747.         AX = 0000h
  7748. Notes:    the returned entry point is that for the most-recently loaded task
  7749.       switcher; the entry points for prior task switchers may be determined
  7750.       with the "get version" call (see #1532)
  7751.     this function is supported by PC Tools v8+ CPTASK
  7752. SeeAlso: AX=4A05h,AX=4B03h
  7753.  
  7754. (Table 1532)
  7755. Call task switcher entry point with:
  7756.     AX = 0000h get version
  7757.         Return: CF clear if successful
  7758.                 AX = 0000h
  7759.                 ES:BX -> task switcher version struct (see #1533)
  7760.             CF set if unsupported function
  7761.     AX = 0001h test memory region
  7762.         ES:DI -> first byte to be tested
  7763.         CX = size of region to test
  7764.         Return: CF clear if successful
  7765.                 AX = memory type of tested region
  7766.                 0000h global
  7767.                 0001h global and local
  7768.                 0002h local (replaced on session switch)
  7769.             CF set if unsupported function
  7770.     AX = 0002h suspend switcher
  7771.         ES:DI -> new task switcher's entry point
  7772.         Return: CF clear if successful
  7773.                 AX = state
  7774.                 0000h switcher has been suspended
  7775.                 0001h switcher not suspended, new switcher must
  7776.                     abort
  7777.                 0002h switcher not suspended, but new switcher
  7778.                     may run anyway
  7779.             CF set if unsupported function
  7780.     AX = 0003h resume switcher
  7781.         ES:DI -> new task switcher's entry point
  7782.         Return: CF clear if successful
  7783.                 AX = 0000h
  7784.             CF set if unsupported function
  7785.     AX = 0004h hook notification chain
  7786.         ES:DI -> callback info structure to be added to chain
  7787.               (see #1530)
  7788.         Return: CF clear if successful
  7789.                 AX = 0000h
  7790.             CF set if unsupported function
  7791.     AX = 0005h unhook notification chain
  7792.         ES:DI -> callback info structure to be removed from chain
  7793.               (see #1530)
  7794.         Return: CF clear if successful
  7795.                 AX = 0000h
  7796.             CF set if unsupported function
  7797.     AX = 0006h query API support
  7798.         BX = asynchronous API identifier
  7799.         Return: CF clear if successful
  7800.                 AX = 0000h
  7801.                 ES:BX -> API info structure (see #1534) for the
  7802.                       client which provides the highest
  7803.                       level of API support
  7804.             CF set if unsupported function
  7805.  
  7806. Format of task switcher version structure:
  7807. Offset    Size    Description    (Table 1533)
  7808.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  7809.  02h    WORD    minor version of supported protocol
  7810.  04h    WORD    major version of task switcher
  7811.  06h    WORD    minor version of task switcher
  7812.  08h    WORD    task switcher ID (see AX=4B03h)
  7813.  0Ah    WORD    operation flags
  7814.         bit 0: set if task switcher disabled
  7815.         bits 1-15: reserved (0)
  7816.  0Ch    DWORD    pointer to ASCIZ task switcher name
  7817.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  7818.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  7819.  
  7820. Format of API info structure:
  7821. Offset    Size    Description    (Table 1534)
  7822.  00h    WORD    size of structure in bytes (000Ah)
  7823.  02h    WORD    API identifier
  7824.         0001h NetBIOS
  7825.         0002h 802.2
  7826.         0003h TCP/IP
  7827.         0004h LAN Manager named pipes
  7828.         0005h Novell NetWare IPX
  7829.  04h    WORD    major version \ of highest version of API for which the support
  7830.  06h    WORD    minor version / level specified in the next field is provided
  7831.  08h    WORD    support level
  7832.         0001h minimal support
  7833.         0002h API-level support
  7834.         0003h switcher compatibility
  7835.         0004h seamless compatibility
  7836. --------T-2F4B03-----------------------------
  7837. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  7838.     AX = 4B03h
  7839.     ES:DI -> task switcher entry point (see #1532)
  7840. Return: AX = 0000h
  7841.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  7842. Notes:    if a task switcher has determined that it is the first to be loaded, it
  7843.       must allocate an identifier for itself and provide this function to
  7844.       all subsequent task switchers; if it is not the first to be loaded,
  7845.       it must call this function to allocate an ID.     The switcher ID is
  7846.       used as the high four bits of all session identifiers to ensure
  7847.       unique session IDs.
  7848.     if no more switcher IDs are available, the new task switcher making the
  7849.       call must terminate or disable itself
  7850.     the task switcher providing the identifiers may call the new task
  7851.       switcher's entry point as needed
  7852.     this call is available from within DOSSHELL even if the task switcher
  7853.       is not installed
  7854.     this function is supported by PC Tools v8+ CPTASK, but appears to
  7855.       always return an ID of 0000h
  7856. SeeAlso: AX=4B02h,AX=4B04h
  7857. --------T-2F4B04-----------------------------
  7858. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  7859.     AX = 4B04h
  7860.     BX = switcher ID
  7861.     ES:DI -> task switcher entry point (see #1532)
  7862. Return: AX = 0000h
  7863.     BX = status
  7864.         0000h successful
  7865.         other error (invalid ID or ID not allocated)
  7866. Notes:    called by a task switcher when it exits, unless it was the first loaded
  7867.       and is providing the support for AX=4B03h and AX=4B04h
  7868.     the task switcher providing the identifiers may call the terminating
  7869.       task switcher's entry point as needed
  7870.     this call is available from within DOSSHELL even if the task switcher
  7871.       is not installed
  7872.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  7873.       sucessfully no matter which ID is given
  7874. SeeAlso: AX=4B02h,AX=4B03h
  7875. --------T-2F4B05-----------------------------
  7876. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  7877.     AX = 4B05h
  7878.     ES:BX = 0000h:0000h
  7879.     CX:DX -> task switcher entry point (see #1532)
  7880. Return: ES:BX -> startup info structure (see #1535) or 0000h:0000h
  7881. Notes:    called by task switcher
  7882.     clients with instance data should hook this call, pass it through to
  7883.       the previous handler with unchanged registers using a simulated
  7884.       interrupt.  On return, the client should create a startup info
  7885.       structure (see #1535), store the returned ES:BX in the "next"
  7886.       field, and return the address of the created structure in ES:BX
  7887.     all MS-DOS function calls are available from within this call
  7888. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  7889.  
  7890. Format of task switcher startup info structure:
  7891. Offset    Size    Description    (Table 1535)
  7892.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  7893.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  7894.  06h    DWORD    0000h:0000h (ignored)
  7895.  0Ah    DWORD    ignored
  7896.  0Eh    DWORD    pointer to instance data records (see #1536)
  7897.  
  7898. Format of one instance data record in array:
  7899. Offset    Size    Description    (Table 1536)
  7900.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  7901.  04h    WORD    size of instance data
  7902. --------W-2F4B06-----------------------------
  7903. INT 2F - MS Windows - WIN.COM - GET ??? POINTER TO WIN.COM
  7904.     AX = 4B06h
  7905. Return:    AX = 0000h
  7906.     ES:BX -> ??? function in WIN.COM
  7907. Note:    the entry point is called with
  7908.         AX = 0001h or 0003h
  7909.         BX = ???
  7910. SeeAlso: AX=4B80h
  7911. --------W-2F4B20-----------------------------
  7912. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  7913.     AX = 4B20h
  7914. Return: AX = 0000h if successful
  7915.         DX:CX -> 256-byte buffer for pathname and commandline (see #1537)
  7916. Note:    when the Windows function ExitWindows is called with an exit code of
  7917.       44h, WIN.COM executes the program specified in the returned buffer
  7918.       and then restarts Windows
  7919.  
  7920. Format of WIN.COM buffer:
  7921. Offset    Size    Description    (Table 1537)
  7922.  00h 128 BYTEs    ASCIZ pathname of program to execute
  7923.  80h 128 BYTEs    commandline for program
  7924. --------W-2F4B80-----------------------------
  7925. INT 2F - MS Windows - WSWAP.EXE - RESET INTERNAL VARIABLES
  7926.     AX = 4B80h
  7927. Return: nothing
  7928. Note:    called by WINOLDAP.MOD
  7929. SeeAlso: AX=4B06h
  7930. --------p-2F4C-------------------------------
  7931. INT 2F U - Advanced Power Management
  7932.     AH = 4Ch
  7933.     AL = function
  7934.         00h version check
  7935.         01h suspend system requested
  7936.         FFh suspend/resume battery notification
  7937.     ???
  7938. Return: ???
  7939. ----------2F4D-------------------------------
  7940. INT 2F U - ???
  7941.     AH = 4Dh
  7942.     ???
  7943. Return: ???
  7944. Note:    reportedly called by Kana Kanji Converter and MSKK
  7945. --------N-2F4E53BL00-------------------------
  7946. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  7947.     AX = 4E53h ("NS")
  7948.     BL = 00h (function "installation check")
  7949.     BH = module ID (see #1538)
  7950. Return: AX = 0000h if specified module installed
  7951.     BX = 4E53h if installed
  7952. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  7953.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  7954. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  7955.  
  7956. (Table 1538)
  7957. Values for SilverNET module ID:
  7958.  01h    SilverCACHE
  7959.  02h    Workstation
  7960.  03h    NetBIOS
  7961.  04h    Peer
  7962.  20h    NS Share
  7963.  80h    NetWare help TSR
  7964. --------N-2F4E53BL01-------------------------
  7965. INT 2F - SilverNET - GET RUNTIME PARAMETER
  7966.     AX = 4E53h ("NS")
  7967.     BL = 01h (function "get runtime parameter")
  7968.     BH = module ID (see #1538)
  7969.     CX = parameter index (see #1539,#1541,#1542)
  7970. Return: AX = WORD value at specified index (see #1540)
  7971. Desc:    retrieve a word of data from the specified SilverNET module
  7972.  
  7973. (Table 1539)
  7974. Values for SilverNET Peer parameter index (* = read-only):
  7975.  00h *    maximum outstanding SMB buffers
  7976.  02h *    maximum logged-in nodes
  7977.  04h *    number of shareable resources
  7978.  06h *    number of characters to print per time slice
  7979.  08h *    number of printers that can be shared
  7980.  0Ah *    number of nodes logged in
  7981.  0Ch *    number of files to allow opened
  7982.  0Eh    how fast to despool (/PSLICE)
  7983.  10h    audit flag
  7984.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  7985.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  7986.     else DOS SFT)
  7987.  36h    spool flags (see #1540)
  7988.  
  7989. Bitfields for spool flags:
  7990. Bit(s)    Description    (Table 1540)
  7991.  0    LPT1 needs despooling
  7992.  1    LPT2 needs despooling
  7993.  2    LPT2 needs despooling
  7994.  4    COM1 needs despooling
  7995.  5    COM2 needs despooling
  7996.  6    COM3 needs despooling
  7997.  
  7998. (Table 1541)
  7999. Values for NS Share parameter index (* = read-only):
  8000.  00h    version number (high byte = minor, low byte = major)
  8001.  10h *    segment of first lock record (other records in consecutive paragraphs)
  8002.     (if PSP field = 0000h, lock record is free)
  8003.  12h *    maximum possible number of lock records
  8004.  14h *    starting segment of sharing buffer
  8005.     (NS Share's sharing records are identical to DOS SHARE except that
  8006.       fields which are normally offsets into SHARE are segment numbers)
  8007.  18h *    size of sharing buffer in paragraphs
  8008.  1Ah *    total free paragraphs in sharing buffer
  8009.  1Ch *    current number of shared files
  8010.  1Eh *    current number of locked records
  8011.  
  8012. (Table 1542)
  8013. Values for Workstation parameter index (* = read-only):
  8014.  00h    version number (high byte = minor, low byte = major)
  8015.  02h *    size of each network buffer for file operations
  8016.  04h *    number of redirector file buffers
  8017.  06h *    size of each print cache buffer
  8018.  08h *    number of network LPT printers
  8019.  0Ch    flush time in ticks (idle time on network printer before flushing)
  8020.  0Eh    (16 WORDs) last active time for each printer
  8021.  2Eh *    stub segment if program split into two parts
  8022.  60h    receive name number for datagram listens
  8023.  62h *    18-byte machine name
  8024.  74h *    LASTDRIVE (01h = A:, etc.)
  8025.  7Ch    row number of message box on screen
  8026.  7Eh    message time in clock ticks
  8027.  82h *    number of network adapters in use
  8028.  84h    station ID broadcast flag (never set on redirectors)
  8029.  96h *    NetBIOS names left
  8030.  98h *    NCBs left
  8031.  9Ah *    sessions left
  8032.  A2h *    total number of network printers (LPT+COM)
  8033.  A4h *    number of serial network printers
  8034.  A8h *    segment containing file cache buffers
  8035.  AAh *    segment containing print cache buffers
  8036.  ACh *    bytes remaining free in HMA before program loaded
  8037.  AEh *    start of free memory in HMA
  8038.  B2h *    flag: using HMA
  8039. --------N-2F4E53BL02-------------------------
  8040. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  8041.     AX = 4E53h ("NS")
  8042.     BL = 02h (function "set runtime parameters")
  8043.     BH = module ID (see #1538)
  8044.     CX = parameter index (see #1541,#1542)
  8045.     DX = new value for specified parameter
  8046. Desc:    set a WORD value in the specified SilverNET module
  8047. Note:    not all indexed parameters are writable; modifying a read-only
  8048.       parameter can result in system crashes
  8049. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  8050. --------N-2F5100-----------------------------
  8051. INT 2F U - ODIHLP.EXE - INSTALLATION CHECK
  8052.     AX = 5100h
  8053. Return: AL = FFh if installed
  8054.         BX = 0000h
  8055.         DX:SI -> signature string "ODI$HLP$"
  8056. Program: ODIHLP is a real-mode helper allowing the Windows for Workgroups 3.11
  8057.       protected-mode NDIS3 protocol to work with real-mode ODI drivers
  8058.       and LSL.COM
  8059. Note:    the returned signature string might be the first field of a structure
  8060. SeeAlso: AX=C000h"LSL.COM"
  8061. --------k-2F5200-----------------------------
  8062. INT 2F - JAM.SYS v1.10+ - "GetVersion" - INSTALLATION CHECK
  8063.     AX = 5200h
  8064. Return: AH = 80h (successful) if installed
  8065.     BX = internal JAM.SYS version number
  8066.     CX = size of JAMINFO structure (see #1543,#1544)
  8067.     DX = JAM.SYS segment address
  8068. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  8069.       Utilities by George A. Reznik and friends (JAM Software).
  8070. SeeAlso: AX=5201h
  8071.  
  8072. Format of JAMINFO v1.10 structure:
  8073. Offset    Size    Description    (Table 1543)
  8074.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  8075.  19h 11 BYTEs    ???
  8076.  25h    DWORD    total number of sectors in JAM archive file
  8077.         (size of compressed data area)
  8078.  29h    BYTE    flags (see #1545)
  8079.  2Ah 127 BYTEs    full JAM archive file name
  8080.  A9h    WORD    the number of fragments in archive file
  8081.  ABh 96 BYTEs    archive file fragmentation list -
  8082.         array of 16 FRAGMENT structures (see #1546)
  8083. 10Bh    DWORD    address of the host-drive DPB (Drive Parameter Block)
  8084. 10Fh    DWORD    number of free sectors in JAM archive file
  8085. 113h    WORD    device status word (see #1547)
  8086. SeeAlso: #1544
  8087.  
  8088. Format of JAMINFO v1.20 structure:
  8089. Offset    Size    Description    (Table 1544)
  8090.  00h 25 BYTEs    extended BIOS parameter block (BPB)
  8091.  19h    BYTE    physical driver number
  8092.  1Ah    BYTE    reserved
  8093.  1Bh    BYTE    extended boot record signature
  8094.  1Ch    DWORD    volume serial number
  8095.  20h 11 BYTEs    volume label
  8096.  2Bh  8 BYTEs    file system ID
  8097.  33h    DWORD    total number of sectors in JAM archive file
  8098.         (size of compressed data area)
  8099.  37h    BYTE    flags (see #1545)
  8100.  38h 128 BYTEs    full JAM archive file name
  8101.  B8h    WORD    the number of fragments in archive file
  8102.  BAh 96 BYTEs    archive file fragmentation list -
  8103.         array of 16 FRAGMENT structures (see #1546)
  8104. 11Ah    DWORD    address of the host-drive DPB (Drive Parameter Block)
  8105. 11Eh    DWORD    number of free sectors in JAM archive file
  8106. 122h    WORD    device status word (see #1547)
  8107. Note:    the first 33h bytes are copied from the archive file's boot sector
  8108. SeeAlso: #1543
  8109.  
  8110. Bitfields for JAMINFO flags:
  8111. Bit(s)    Description    (Table 1545)
  8112.  2-0    reserved
  8113.  3    (v1.20+)
  8114.  4    enable direct write requests (Int 26h, non-DOS requests, etc.)
  8115.  5    read-only mode
  8116.  6    no write-behind caching
  8117.  7    full undelete-compatible allocation strategy
  8118. SeeAlso: #1543,#1544
  8119.  
  8120. Format of JAM FRAGMENT structure:
  8121. Offset    Size    Description    (Table 1546)
  8122.  00h    WORD    starting sector (low word)
  8123.  02h    BYTE    starting sector (high byte)
  8124.  03h    WORD    size of fragment (low word)
  8125.  05h    BYTE    size of fragment (high byte)
  8126. SeeAlso: #1543,#1544
  8127.  
  8128. (Table 1547)
  8129. Values for JAM.SYS status (high byte):
  8130.  00h    successful
  8131.  01h    drive is not a JAM drive
  8132.  02h    drive is already attached
  8133.  03h    archive file cluster size value is larger than driver's one
  8134.  04h    drive is not attached
  8135.  05h    drive is locked
  8136.  06h    drive is not locked
  8137.  07h    bad physical-level request
  8138.  08h    host drive reading/writing error
  8139.  09h    bad entries in JAM descriptor table
  8140.  0Ah    compressed data integrity error
  8141.  0Bh    archive file overflow
  8142.  0Ch    bad DOS request
  8143.  0Dh    incorrect parameters in JAMINFO structure
  8144. Note:    the low byte of the status is the DOS error code for the Host drive
  8145. SeeAlso: #1383 at INT 2F/AX=0802h
  8146. --------k-2F5201-----------------------------
  8147. INT 2F - JAM.SYS v1.10+ - "GetInfo" - GET COMPRESSED DRIVE INFORMATION
  8148.     AX = 5201h
  8149.     DL = compressed drive number (0-default, 1-A:, etc.)
  8150.     DS:BX -> buffer for JAMINFO structure (see #1543,#1544)
  8151. Return: AH = status (00h,01h) (see #1547)
  8152. SeeAlso: AX=5200h
  8153. --------k-2F5202-----------------------------
  8154. INT 2F - JAM.SYS v1.10+ - "Attach" - MOUNT COMPRESSED DRIVE
  8155.     AX = 5202h
  8156.     DL = drive number (0-default, 1-A:, etc.) to attach to the JAM
  8157.           archive file
  8158.     DS:BX -> pointer to JAMINFO structure (see #1543,#1544), which
  8159.           contains parameters of the JAM file to mount, and pointer
  8160.           to the host drive DPB (i.e. DPB of the drive on which the
  8161.           JAM file is located)
  8162. Return: AH = status (00h,02h,03h,08h,09h,0Dh) (see also #1547)
  8163.         03h archive file cluster size value is larger than driver's - not
  8164.           mounted
  8165.         09h bad entries in JAM descriptor table - file mounted read-only
  8166.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8167. SeeAlso: AX=5203h
  8168. --------k-2F5203-----------------------------
  8169. INT 2F - JAM.SYS v1.10+ - "Detach" - UNMOUNT COMPRESSED DRIVE
  8170.     AX = 5203h
  8171.     DL = drive number (0-default, 1-A:, etc.) to detach
  8172. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #1547)
  8173.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8174. SeeAlso: AX=5202h
  8175. --------k-2F5204-----------------------------
  8176. INT 2F - JAM.SYS v1.10+ - "Lock" - LOCK COMPRESSED DRIVE
  8177.     AX = 5204h
  8178.     DL = drive number (0-default, 1-A:, etc.) to lock
  8179. Return: AH = status (00h,01h,04h,05h,08h,09h,0Bh,0Dh) (see #1547)
  8180.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8181. SeeAlso: AX=5205h, AX=5206h, AX=5207h
  8182. --------k-2F5205-----------------------------
  8183. INT 2F - JAM.SYS v1.10+ - "UnLock" - UNLOCK COMPRESSED DRIVE
  8184.     AX = 5205h
  8185.     DL = drive number (0-default, 1-A:, etc.) to unlock
  8186. Return: AH = status (00h,01h,04h,06h,08h,09h,0Dh) (see #1547)
  8187.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8188. SeeAlso: AX=5204h, AX=5206h, AX=5207h
  8189. Note:    Lock and UnLock functions were added to the JAM API to prevent
  8190.       asynchronous physical-level access (see AX=5206h,AX=5207h) to
  8191.       compressed data on JAM drives. In other words, two or more programs
  8192.       which use JAM API (say, JMAX optimizer and JCHKDSK - disk checker)
  8193.       cannot be run on the same JAM drive simultaneously.
  8194. --------k-2F5206-----------------------------
  8195. INT 2F - JAM.SYS v1.10+ - "Read" - PHYSICAL READ DATA FROM JAM ARCHIVE
  8196.     AX = 5206h
  8197.     DL = drive number (0-default, 1-A:, etc.)
  8198.     DS:BX -> disk transfer packet (see #1548)
  8199. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #1547)
  8200.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8201. Program: JAM.SYS is a main component of the JAM Real-Time Data Compression
  8202.       Utilities by George A. Reznik and friends (JAM Software).
  8203. SeeAlso: AX=5207h
  8204.  
  8205. Format of disk transfer packet:
  8206. Offset    Size    Description    (Table 1548)
  8207.  00h    DWORD    sector number
  8208.  04h    WORD    number of sectors to read(write)
  8209.  06h    DWORD    transfer address
  8210. --------k-2F5207-----------------------------
  8211. INT 2F - JAM.SYS v1.10+ - "Write" - PHYSICAL WRITE DATA TO JAM ARCHIVE
  8212.     AX = 5207h
  8213.     DL = drive number (0-default, 1-A:, etc.)
  8214.     DS:BX -> disk transfer packet (see #1548)
  8215. Return: AH = status (00h,01h,04h,06h,07h,08h,0Dh) (see #1547)
  8216.     AL = host drive error code (see #1383 at INT 2F/AX=0802h)
  8217. SeeAlso: AX=5206h
  8218. --------p-2F53-------------------------------
  8219. INT 2F U - POWER.EXE - APM event broadcasting???
  8220.     AH = 53h
  8221.     AL = event???
  8222.         05h CPU idle
  8223.         0Bh PM event broadcast API
  8224. Return: ???
  8225. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  8226.       and PC-Cache v8.0
  8227. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  8228. --------p-2F530B-----------------------------
  8229. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  8230.     AX = 530Bh
  8231.     BX = subfunction
  8232.         0003h ???
  8233.         0004h ???
  8234.     ???
  8235. Return: ???
  8236. Note:    it appears that subfunction 0003h reads or restores the current mouse
  8237.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  8238.       the converse
  8239. --------p-2F5400-----------------------------
  8240. INT 2F U - POWER.EXE - INSTALLATION CHECK
  8241.     AX = 5400h
  8242. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  8243.     BX = 504Dh ("PM")
  8244.     CF clear
  8245. Note:    called by MS Windows 3.1 POWER.DRV
  8246. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  8247. --------p-2F5401-----------------------------
  8248. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  8249.     AX = 5401h
  8250.     BH = function
  8251.         00h get status
  8252.         Return: BL = current power management status (see #1549)
  8253.         01h set status
  8254.         BL = new power managment status (see #1549)
  8255. Return: AX = function status (see #1550)
  8256. Note:    called by MS Windows 3.1 POWER.DRV
  8257. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  8258.  
  8259. Bitfields for power management status:
  8260. Bit(s)    Description    (Table 1549)
  8261.  0    POWER.EXE power management enabled
  8262.  1    APM firmware power management enabled
  8263.  2-7    reserved (0)
  8264. Notes:    bit 1 is ignored if there is no APM firmware
  8265.     bits 1-0: 00 = POWER OFF, 10 = POWER STD, 11 = POWER ADV
  8266.  
  8267. (Table 1550)
  8268. Values for POWER.EXE function status:
  8269.  0000h    successful
  8270.  0002h    "ERROR_PM_ALREADY_CONNECTED"
  8271.  0003h    "ERROR_PM_NOT_CONNECTED"
  8272.  0087h    "ERROR_PM_INVALID_PARAMETER"
  8273. --------p-2F5402-----------------------------
  8274. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  8275.     AX = 5402h
  8276.     BH = subfunction
  8277.         00h get
  8278.         other set
  8279.         BL = detection strategy (00h-0Fh or FFh)
  8280. Return: BX = current/new detection strategy
  8281. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  8282. --------p-2F5403-----------------------------
  8283. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  8284.     AX = 5403h
  8285.     BX = new power management setting or 0000h to get current setting
  8286. Return: AX = status
  8287.         0000h successful
  8288.         BX = power management setting (see #1551)
  8289.         other error code
  8290. SeeAlso: AX=5401h,AX=5480h
  8291.  
  8292. (Table 1551)
  8293. Values for power management setting:
  8294.  0001h-0005h "min"
  8295.  0006h         "reg"
  8296.  0007h-0008h "max"
  8297. --------t-2F5453-----------------------------
  8298. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  8299.     AX = 5453h
  8300.     BX = subfunction
  8301.         00h installation check
  8302.         CX = 0000h
  8303.         DS:SI -> 8-char blank-padded name (see #1552)
  8304.         Return: AX = FFFFh installed
  8305.                 CX = ID number of already-installed copy
  8306.             AX = anything else, not installed
  8307.                 CX = ID number for TSR when installed
  8308.         01h get user parameters
  8309.         CX = TSR ID number
  8310.         Return: AX = status
  8311.                 0000h successful
  8312.                 ES:BX -> user parameter block (see #1553)
  8313.                 nonzero failed
  8314.         02h check if hotkey in use
  8315.         CL = scan code of hot key
  8316.         Return: AX = FFFFh hot key conflicts with another TSR
  8317.                  otherwise safe to use the hotkey
  8318.         03h replace default critical error handler
  8319.         CX = TSR ID number
  8320.         DS:SI -> new routine for INT 24h
  8321.         Return: AX = nonzero, unable to install new handler
  8322.         04h get internal data area
  8323.         CX = TSR ID number
  8324.         Return: AX = status
  8325.                 0000h successful
  8326.                 ES:BX -> TSR's internal data area (see #1554)
  8327.                 nonzero, TSR not found
  8328.         05h set multiple hot keys
  8329.         CX = TSR ID number
  8330.         DL = number of additional hot keys to allocate
  8331.         DS:SI -> table of hot keys
  8332.             BYTE  hotkey scan code
  8333.             BYTE  hotkey shift state
  8334.             BYTE  flag value to pass to TSR (nonzero)
  8335.         Return: AX = nonzero, unable to install hot keys
  8336.         06h - 0Fh reserved
  8337.         10h enable TSR
  8338.         CX = TSR ID number
  8339.         Return: AX = nonzero, unable to enable
  8340.         11h disable TSR
  8341.         CX = TSR ID number
  8342.         Return: AX = nonzero, unable to disable
  8343.         12h unload TSR
  8344.         CX = TSR ID number
  8345.         Return: AX = nonzero, invalid TSR number
  8346.         Note: if any interrupts used by TSR have been grabbed by
  8347.             another TSR, the TesSeRact routines will wait until
  8348.             it is safe to remove the indicated TSR from memory
  8349.         13h restart TSR
  8350.         CX = TSR ID number of TSR which was unloaded but is still in
  8351.              memory
  8352.         Return: AX = nonzero, unable to restart TSR
  8353.         14h get status word
  8354.         CX = TSR ID number
  8355.         Return: AX = FFFFh invalid ID number
  8356.                = other, successful
  8357.                 BX = bit flags
  8358.         15h set status word
  8359.         CX = TSR ID number
  8360.         DX = new bit flags
  8361.         Return: AX = nonzero, unable to set status word
  8362.         16h get INDOS state at popup
  8363.         CX = TSR ID number
  8364.         Return: AX = 0000h successful
  8365.                 BX = value of INDOS flag
  8366.         17h - 1Fh reserved
  8367.         20h call user procedure
  8368.         CX = TSR ID number
  8369.         ES:DI -> user-defined data
  8370.         Return: AX = 0000h successful
  8371.         21h stuff keystrokes into keyboard buffer
  8372.         CX = TSR ID number
  8373.         DL = speed
  8374.             00h stuff keystrokes only when buffer is empty
  8375.             01h stuff up to four keystrokes per clock tick
  8376.             02h stuff up to 15 keystrokes per clock tick
  8377.         DH = scan code flag
  8378.             if zero, buffer contains alternating ASCII and scan codes
  8379.             if nonzero, buffer contains only ASCII codes
  8380.         SI = number of keystrokes
  8381.         ES:DI -> buffer to stuff
  8382.         Return: AX = 0000h success
  8383.                  F0F0h user aborted with ^C or ^Break
  8384.                  other unable to stuff keystrokes
  8385.         22h (v1.10) trigger popup
  8386.         CX = TSR ID number
  8387.         Return: AX = 0000h success, TSR will either pop up or beep to
  8388.                    indicate that it is unable to pop up
  8389.                  nonzero invalid ID number
  8390.         23h (v1.10) invoke TSR's background function
  8391.         CX = TSR ID number
  8392.         Return: AX = 0000h success
  8393.                  FFFFh not safe to call background function
  8394.                  nonzero invalid ID number
  8395.         24h - 2Fh reserved
  8396. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  8397.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  8398.       do the SWAP?? programs by Innovative Data Concepts.
  8399.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  8400.       of the user parameter block) using the name "AVATAR  "
  8401. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  8402. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  8403.  
  8404. (Table 1552)
  8405. Values for TesSeRact names:
  8406.  "AVATAR  "    AVATAR.SYS
  8407.  "QeditTSR"    TSR version of SemWare's Qedit editor
  8408.  "SCRNBLNK"    Trusted Access screen blanker
  8409.  
  8410. Format of TesSeRact User Parameter Block:
  8411. Offset    Size    Description    (Table 1553)
  8412.  00h  8 BYTEs    blank-padded TSR name
  8413.  08h    WORD    TSR ID number
  8414.  0Ah    DWORD    bitmap of supported functions
  8415.  0Eh    BYTE    scan code of primary hotkey
  8416.         00h = pop up when shift states match
  8417.         FFh = no popup (if shift state also FFh)
  8418.  0Fh    BYTE    shift state of primary hotkey
  8419.         FFh = no popup (if scan code also FFh)
  8420.  10h    BYTE    number of secondary hotkeys
  8421.  11h    DWORD    pointer to extra hotkeys set by func 05h
  8422.  15h    WORD    current TSR status flags
  8423.  17h    WORD    PSP segment of TSR
  8424.  19h    DWORD    DTA for TSR
  8425.  1Dh    WORD    default DS for TSR
  8426.  1Fh    DWORD    stack at popup
  8427.  23h    DWORD    stack at background invocation
  8428. Index:    hotkeys;TesSeRact TSR interface
  8429.  
  8430. Format of TSR internal data area:
  8431. Offset    Size    Description    (Table 1554)
  8432.  00h    BYTE    revision level of TesSeRact library
  8433.  01h    BYTE    type of popup in effect
  8434.  02h    BYTE    INT 08 occurred since last invocation
  8435.  03h    BYTE    INT 13 occurred since last invocation
  8436.  04h    BYTE    active interrupts
  8437.  05h    BYTE    active soft interrupts
  8438.  06h    BYTE    DOS major version
  8439.  07h    BYTE    how long to wait before popping up
  8440.  08h    DWORD    pointer to INDOS flag
  8441.  0CH    DWORD    pointer to DOS critical error flag
  8442.  10h    WORD    PSP segment of interrupted program
  8443.  12h    WORD    PSP segment of prog interrupted by INT 28
  8444.  14h    DWORD    DTA of interrupted program
  8445.  18h    DWORD    DTA of program interrupted by INT 28
  8446.  1Ch    WORD    SS of interrupted program
  8447.  1Eh    WORD    SP of interrupted program
  8448.  20h    WORD    SS of program interrupted by INT 28
  8449.  22h    WORD    SP of program interrupted by INT 28
  8450.  24h    DWORD    INT 24 of interrupted program
  8451.  28h  3 WORDs    DOS 3+ extended error info
  8452.  2Eh    BYTE    old BREAK setting
  8453.  2Fh    BYTE    old VERIFY setting
  8454.  30h    BYTE    were running MS WORD 4.0 before popup
  8455.  31h    BYTE    MS WORD 4.0 special popup flag
  8456.  32h    BYTE    enhanced keyboard call in use
  8457.  33h    BYTE    delay for MS WORD 4.0
  8458. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  8459.     DWORD    old interrupt vector
  8460.     BYTE    interrupt number
  8461.     WORD    offset in TesSeRact code segment of new interrupt handler
  8462. --------p-2F5480-----------------------------
  8463. INT 2F U - POWER.EXE - GET/SET ???
  8464.     AX = 5480h
  8465.     BX = direction
  8466.         0000h get
  8467.         other set
  8468.     CX = size of buffer (at least 0010h)
  8469.     DS:SI -> buffer
  8470. Return: AX = status
  8471.         0000h successful
  8472.         other error code
  8473. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  8474. --------p-2F5481-----------------------------
  8475. INT 2F U - POWER.EXE - GET STATISTICS
  8476.     AX = 5481h
  8477.     BX = which statistics
  8478.         0000h idle detection
  8479.         0001h APM statistics
  8480.     CX = length of buffer in bytes
  8481.     DS:SI -> buffer for statistics (see #1555,#1556)
  8482. Return: AX = status
  8483.         0000h successful
  8484.         0071h "ERROR_PM_BUFFER_TOO_SMALL"
  8485.         0087h "ERROR_PM_INVALID_PARAMETER"
  8486. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  8487.  
  8488. Format of POWER.EXE idle detection statistics:
  8489. Offset    Size    Description    (Table 1555)
  8490.  00h    DWORD    "CPU_ON_TIME" total time CPU is active with POWER.EXE idle
  8491.           detection enabled, in timer ticks
  8492.  04h    DWORD    "CPU_IDLE_TIME" timer ticks during which CPU was idle
  8493.         (divide by previous to get idle    rate)
  8494.  08h    DWORD    total idle calls
  8495.  0Ch    DWORD    "TOTAL_APP_IDLE" total INT 2Fh idle calls
  8496.  10h    DWORD    "TOTAL_DOS_YIELD" total INT 28h idle calls
  8497.  14h    DWORD    "TOTAL_KEY_IDLE" total INT 16h idle calls
  8498.  18h    DWORD    "TOTAL_DOS_IDLE" total INT 2Ah idle calls
  8499.  
  8500. Format of APM statistics:
  8501. Offset    Size    Description    (Table 1556)
  8502.  00h    DWORD    "RESUME_COUNT" total number of resumes since last APM_ENABLE
  8503. --------p-2F5482-----------------------------
  8504. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  8505.     AX = 5482h
  8506.     BX = new polling frequency or 0000h to get current frequency
  8507. Return: AX = 0000h (successful)
  8508.     BX = current frequency if BX=0000h on entry
  8509. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  8510. --------p-2F548F-----------------------------
  8511. INT 2F U - POWER.EXE - GET/SET ???
  8512.     AX = 548Fh
  8513.     BX = ??? or 0000h to get current ???
  8514. Return: AX = 0000h (successful)
  8515.     BX = current ???
  8516.     CX = ???
  8517. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  8518. --------l-2F5500-----------------------------
  8519. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  8520.     AX = 5500h
  8521. Return: AX = 0000h if an instance of COMMAND.COM is already running
  8522.     DS:SI -> entry point table
  8523. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  8524.       been moved into the HMA; only the primary COMMAND.COM retains this
  8525.       portion
  8526.     procedures called from a dispatcher in COMMAND's resident portion;
  8527.       most assume that the segment address of the resident portion is on
  8528.       the stack and are thus not of general use
  8529. SeeAlso: AX=5501h
  8530. --------l-2F5501-----------------------------
  8531. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  8532.     AX = 5501h
  8533. Return: ???
  8534. Note:    used to determine whether the caller is the first instance of ROM
  8535.       COMMAND.COM
  8536. SeeAlso: AX=5500h
  8537. --------R-2F5600-----------------------------
  8538. INT 2F - INTERLNK - INSTALLATION CHECK
  8539.     AX = 5600h
  8540.     DX = magic value FFFFh
  8541.     BL = instance number (00h = any, 01h = first loaded, etc.)
  8542. Return: AL = FFh if installed
  8543.         BL = instance number
  8544.         CX = ??? (apparently always 0001h)
  8545.         DX = resident CS of driver, DX:0000h -> header (see #1557)
  8546. SeeAlso: AX=5601h,AX=5602h,INT 60/AX=0000h
  8547.  
  8548. Format of Interlnk device driver header:
  8549. Offset    Size    Description    (Table 1557)
  8550.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  8551.  04h    WORD    device attributes (see #0859,#0860)
  8552.  06h    WORD    device strategy entry point
  8553.  08h    WORD    device interrupt entry point
  8554.  0Ah  8 BYTEs    character device name "NUL2    "
  8555.  12h 165 BYTEs    ???
  8556.  B7h 67 BYTEs    fully qualified Interlnk filename
  8557.  FAh  6 BYTEs    ???
  8558. 100h    DWORD    pointer back to Interlnk filename at offset B7h
  8559. 104h  8 BYTEs    ???
  8560. 10Ch    BYTE    total number of redirected drives
  8561. 10Dh    BYTE    first local drive number (0=A:)
  8562. 10Eh    BYTE    printer redirection (0=no, 1=yes)
  8563. 10Fh    BYTE    ???
  8564. 110h  3    BYTEs    LPT1...3 status (0FFh=invalid)
  8565. 113h 26 BYTEs    remote drive number (0=A:, 0FEh=unused) (see note below)
  8566. 12Dh 26 BYTEs    always 0FEh ???
  8567. 147h 26 BYTEs    always 0FFh ???
  8568. Note:    to obtain the remote drive number, subtract the value at offset 10Ch
  8569.       from the local drive number before indexing into the table at 113h
  8570.       (example: if local drives F, G, H are remote drives C, F, E then
  8571.       the first three bytes at offset 113h are 02h, 05h, 04h)
  8572.     for each instance of Interlnk, an extra device driver is loaded, but
  8573.       all have the same device name NUL2
  8574. SeeAlso: #0858 at INT 21/AH=52h
  8575. --------R-2F5601-----------------------------
  8576. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  8577.     AX = 5601h
  8578.     DX = magic value FFFFh
  8579.     BH = drive number (0=A:)
  8580.     BL = 00h
  8581. Return: (as for AL=00h if redirected drive)
  8582. SeeAlso: AX=5600h
  8583. --------R-2F5602-----------------------------
  8584. INT 2F - INTERLNK - GET ???
  8585.     AX = 5602h
  8586.     DX = magic value FFFFh
  8587. Return: CX = ???
  8588. SeeAlso: AX=5600h
  8589. ----------2F57-------------------------------
  8590. INT 2F U - ???
  8591.     AH = 57h
  8592.     ???
  8593. Return: ???
  8594. Note:    reportedly used by Iomega Corp.
  8595. --------c-2F5758BX4858-----------------------
  8596. INT 2F U - Helix Multimedia Cloaking - CACHECLK - INSTALLATION CHECK
  8597.     AX = 5758h
  8598.     BX = 4858h ('HX')
  8599.     DX = 4443h ('DC')
  8600.     CX <> 5758h
  8601. Return: BX = 6878h if installed
  8602.     DX = 6463h if installed
  8603.        CX = version (CH=major,CL=minor)
  8604. Program: CACHECLK is a 'Cloaked' disk cache by Helix Software
  8605. Note:    returns with registers unchanged if CX=5758h on entry
  8606. SeeAlso: INT 16/AX=5758h/BX=4858h,INT 2F/AX=4310h"Cloaking"
  8607. --------X-2F5D00-----------------------------
  8608. INT 2F U - PCMCIA - AWARD PCDISK - GET INFO FROM DRIVER ???
  8609.     AX = 5D00h
  8610. Return: ES:BX -> ???
  8611. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  8612. SeeAlso: AX=5D01h,INT 21/AX=440Dh
  8613. --------X-2F5D01-----------------------------
  8614. INT 2F U - PCMCIA - AWARD PCDISK - PUT INFO INTO DRIVER ???
  8615.     AX = 5D01h
  8616.     ES:BX -> ???
  8617. Return: nothing
  8618. Note:    supported by Ventura Micro / Award PCDISK.EXE v1.02c PCMCIA/ATA driver
  8619. SeeAlso: AX=5D00h,INT 21/AX=440Dh
  8620. --------s-2F60FFDL00-------------------------
  8621. INT 2F U - IPLAY v1.00b - INSTALLATION CHECK
  8622.     AX = 60FFh
  8623.     DL = 00h (function number)
  8624.     BX = 5344h ('SD')
  8625.     CX = 4D50h ('MP')
  8626. Return: AX = 4F4Bh ('OK') if installed
  8627. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  8628.       (digitized music files)
  8629. Note:    in version 1.00b, any value for DL except 01h invokes this function
  8630. SeeAlso: AX=60FFh/DL=01h
  8631. --------s-2F60FFDL01-------------------------
  8632. INT 2F U - IPLAY v1.00b - GET DATA SEGMENT
  8633.     AX = 60FFh
  8634.     DL = 01h (function number)
  8635.     BX = 5344h ('SD')
  8636.     CX = 4D50h ('MP')
  8637. Return: AX = data segment
  8638. Program: IPLAY is the Inertia Player by Prime and Excalibur for .MODules
  8639.       (digitized music files)
  8640. SeeAlso: AX=60FFh/DL=00h
  8641. --------v-2F6282-----------------------------
  8642. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  8643.     AX = 6282h
  8644.     CX:DX -> ??? or 0000h:0000h
  8645.     DI = segment of ??? record (see #1558) or 0000h/FFFFh to ignore
  8646. Return: BX = 0062h
  8647. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  8648.       (DATAMON only)
  8649. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  8650.  
  8651. Format of VSAFE/VWATCH record:
  8652. Offset    Size    Description    (Table 1558)
  8653.  00h    DWORD    ???
  8654.  04h    WORD    offset of ??? in record's segment
  8655.         VSAFE 2.0 sets byte at +01h to 56h or 58h
  8656.         VWATCH 2.1 sets byte at +02h to 56h or 58h
  8657.  06h  2 BYTEs    ???
  8658.  08h    BYTE    ??? (01h/other)
  8659. --------v-2F6284BX0000-----------------------
  8660. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT    - INSTALLATION CHECK
  8661.     AX = 6284h
  8662.     BX = 0000h
  8663.     CX = 0000h
  8664. Return: AX = segment of resident code
  8665.     BX = 5555h
  8666.     CX = 5555h
  8667. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  8668. SeeAlso: AX=6284h/BX=0001h,INT 16/AX=FFA3h
  8669. --------v-2F6284BX0001-----------------------
  8670. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET ???
  8671.     AX = 6284h
  8672.     BX = 0001h
  8673.     CX = 0001h
  8674. Return: AX:BX -> ??? data (see #1559)
  8675.     CX = BX
  8676. SeeAlso: AX=6284h/BX=0000h
  8677.  
  8678. Format of DPROTECT data for v9.0:
  8679. Offset    Size    Description    (Table 1559)
  8680.  00h  5 BYTEs    ???
  8681.  05h    WORD    resident code segment (may be segment of DWORD at +03h)
  8682.  07h    DWORD    -> FAR function to sound alert tone
  8683.     ???
  8684. --------v-2F6284BX0002-----------------------
  8685. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - GET OPTIONS
  8686.     AX = 6284h
  8687.     BX = 0002h
  8688.     CX = 0002h
  8689. Return: AX = options (see #1560)
  8690.     BX = ??? (0000h for v9)
  8691.     CX = AX
  8692.     DX = BX
  8693. Note:    also supported by DOS 6 UNDELETE which is licensed from PC Tools
  8694. SeeAlso: AX=6284h/BX=0000h,AX=6284h/BX=0003h
  8695.  
  8696. Bitfields for DATAMON/DPROTECT options:
  8697. Bit(s)    Description    (Table 1560)
  8698.  1    ???
  8699.  12    disabled
  8700.  13    using Delete Sentry
  8701.  14    using Delete Tracker
  8702. --------v-2F6284BX0003-----------------------
  8703. INT 2F U - PC Tools v7-8 DATAMON, v9+ DPROTECT - SET OPTION??? FLAGS
  8704.     AX = 6284h
  8705.     BX = 0003h
  8706.     CX = flags (see #1561)
  8707.     DX = flags
  8708.         bit 15: ???
  8709. Note:    v9 DPROTECT only checks bit 12 of CX, and ignores DX entirely
  8710. SeeAlso: AX=6284h/BX=0002h
  8711.  
  8712. Bitfields for DATAMON/DPROTECT CX flags:
  8713. Bit(s)    Description    (Table 1561)
  8714.  3    ???
  8715.  5    ???
  8716.  10    ???
  8717.  12    disable DATAMON/DPROTECT
  8718. --------v-2F6284BX0004-----------------------
  8719. INT 2F U - PC Tools v8 DATAMON, v9+ DPROTECT - ???
  8720.     AX = 6284h
  8721.     BX = 0004h
  8722.     CX = 0004h
  8723. Return: AX = 5555h
  8724.     BX = ??? (0800h)
  8725.     CX = ??? (FCCCh for v8, FCCBh for v9)
  8726. --------V-2F6400-----------------------------
  8727. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  8728.     AX = 6400h
  8729. Return: AL = installation state
  8730.         00h not installed
  8731.         FFh installed
  8732. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  8733. SeeAlso: INT 10/AX=5555h,INT 14/AX=AA01h
  8734. Index:    screen saver;SCRNSAV2
  8735. --------N-2F7000-----------------------------
  8736. INT 2F - License Service API - INSTALLATION CHECK
  8737.     AX = 7000h
  8738.     CX = license server index (0000h to 001Fh)
  8739. Return: AL = status
  8740.         00h not installed
  8741.         FFh installed
  8742. Notes:    The License Service API is being maintained by Microsoft but is being
  8743.       supported by a large number of companies including Apple, Banyan,
  8744.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  8745.       and Wordperfect (not a complete list!)
  8746.     Each license service provider must search for the next free index
  8747.       slot to use
  8748. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  8749. --------N-2F7001-----------------------------
  8750. INT 2F - License Service API - REQUEST LICENSE
  8751.     AX = 7001h
  8752.     CX = license server index (0000h to 001Fh)
  8753.     DS:DX -> SLSREQUEST structure (see #1562)
  8754. Return: AX = status
  8755.         0000h success
  8756.         else  provider error code
  8757.     ES:BX = provider specific handle for the license context
  8758. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  8759.  
  8760. Format of License Service SLSREQUEST structure:
  8761. Offset    Size    Description    (Table 1562)
  8762.  00h    DWORD    (ret) status code
  8763.  04h    DWORD    (ret) handle identifying context
  8764.  08h    DWORD    (call) address of Publisher string
  8765.  0Ch    DWORD    (call) address of Product string
  8766.  10h    DWORD    (call) address of Version string
  8767.  14h    DWORD    units required
  8768.  18h    DWORD    address of comment string
  8769.  1Ch    DWORD    address of SLSCHALLENGE structure (see #1563)
  8770.  
  8771. Format of License Service SLSCHALLENGE structure:
  8772. Offset    Size    Description    (Table 1563)
  8773.  00h    DWORD    algorithm (currently always 1)
  8774.  04h    DWORD    secret to be challenged (1-255)
  8775.  08h    DWORD    size of challenge in bytes (1-255)
  8776.  0Ch  N BYTEs    challenge data
  8777. --------N-2F7002-----------------------------
  8778. INT 2F - License Service API - RELEASE LICENSE
  8779.     AX = 7002h
  8780.     CX = license server index (0000h to 001Fh)
  8781.     DS:DX -> SLSRELEASE structure (see #1564)
  8782.     ES:BX = provider specific handle for the license context
  8783. Return: AL = status
  8784.         00h not installed
  8785.         FFh installed
  8786. SeeAlso: AX=7001h,AX=7005h
  8787.  
  8788. Format of License Service SLSRELEASE structure:
  8789. Offset    Size    Description    (Table 1564)
  8790.  00h    DWORD    handle indentifying license context
  8791.  04h    DWORD    total units consumed
  8792.  08h    DWORD    address of comment string
  8793. --------N-2F7003-----------------------------
  8794. INT 2F - License Service API - UPDATE
  8795.     AX = 7003h
  8796.     CX = license server index (0000h to 001Fh)
  8797.     DS:DX -> SLSUPDATE structure (see #1565)
  8798.     ES:BX = provider specific handle for the license context
  8799. Return: AL = status
  8800.         00h not installed
  8801.         FFh installed
  8802. SeeAlso: AX=7004h,AX=7005h
  8803.  
  8804. Format of License Service SLSUPDATE structure:
  8805. Offset    Size    Description    (Table 1565)
  8806.  00h    DWORD    (ret) status code
  8807.  04h    DWORD    (call) handle identifying license context
  8808.  08h    DWORD    (call) total units consumed
  8809.  0Ch    DWORD    additional units required
  8810.  10h    DWORD    address of comment string
  8811.  14h    DWORD    address of SLSCHALLENGE structure (see #1563)
  8812. --------N-2F7004-----------------------------
  8813. INT 2F - License Service API - GET ERROR
  8814.     AX = 7004h
  8815.     CX = license server index (0000h to 001Fh)
  8816.     DS:DX -> SLSGETERROR structure (see #1566)
  8817.     ES:BX = provider specific handle for the license context
  8818. Return: AL = status
  8819.         00h not installed
  8820.         FFh installed
  8821. SeeAlso: AX=7000h,AX=7001h
  8822.  
  8823. Format of License Service SLSGETERROR structure:
  8824. Offset    Size    Description    (Table 1566)
  8825.  00h    DWORD    (ret) status code
  8826.  04h    DWORD    handle identifying license context
  8827.  08h    DWORD    error code
  8828.  0Ch    DWORD    buffer size in bytes
  8829.  10h  N BYTEs    data buffer
  8830. --------N-2F7005-----------------------------
  8831. INT 2F - License Service API - QUERY LICENSE
  8832.     AX = 7005h
  8833.     CX = license server index (0000h to 001Fh)
  8834.     DS:DX -> SLSQUERY structure (see #1567)
  8835.     ES:BX = provider specific handle for the license context
  8836. Return: AL = status
  8837.         00h not installed
  8838.         FFh installed
  8839. SeeAlso: AX=7001h,AX=7002h
  8840.  
  8841. Format of License Service SLSQUERY structure:
  8842. Offset    Size    Description    (Table 1567)
  8843.  00h    DWORD    (ret) status code
  8844.  04h    DWORD    handle identifying license context
  8845.  08h    DWORD    information index
  8846.  0Ch    DWORD    buffer size in bytes
  8847.  10h  N BYTEs    data buffer
  8848. --------K-2F7041BX4B70-----------------------
  8849. INT 2F U - HP 200LX - KEY200 - INSTALLATION CHECK
  8850.     AX = 7041h
  8851.     BX = 4B70h
  8852. Return: BX = 7965h if keyboard remapper KEY200.COM installed
  8853. --------d-2F7200-----------------------------
  8854. INT 2F - SRDISK v1.30+ - INSTALLATION CHECK
  8855.     AX = 7200h
  8856. Return: AL = FFh if installed
  8857.         ES = segment of device driver header (see #1568)
  8858. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  8859. SeeAlso: AX=7201h
  8860.  
  8861. Format of SRDISK device driver header:
  8862. Offset    Size    Description    (Table 1568)
  8863.  00h 10 BYTEs    same as standard device driver header
  8864.           (see #0858 at INT 21/AH=52h)
  8865.  0Ah    BYTE    number of subunits (drives) supported by driver
  8866.  0Bh  3 BYTEs    signature "SRD"
  8867.  0Eh  4 BYTEs    memory type string ("XMS "/"EMS ")
  8868.  12h  4 BYTEs    ASCII driver version string "N.NN"
  8869.  16h    BYTE    00h
  8870.  17h    BYTE    configuration format version (currently 00h or 01h)
  8871.  18h    WORD    offset of drive configuration data
  8872. --------d-2F7201-----------------------------
  8873. INT 2F - SRDISK v2.02 - GET CODE/DATA SEGMENT
  8874.     AX = 7201h
  8875. Return: AL = FFh if installed
  8876.         ES = segment of device driver header
  8877. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  8878. SeeAlso: AX=7200h
  8879. --------!---Section--------------------------
  8880.